Couchbase는 가장 빠르고 확장성이 뛰어난 NoSQL 플랫폼으로 잘 알려져 있습니다. 하지만 Couchbase가 관계형 데이터베이스가 될 수도 있다는 사실을 알고 계셨나요? Couchbase는 동일한 플랫폼에서 여러 개의 개성을 동시에 운영할 수 있는 데이터 플랫폼입니다. 구조화되거나 구조화되지 않을 수 있습니다. 또한 트랜잭션형일 수도 있고 분석형일 수도 있습니다. 이 블로그에서는 오라클에서 카우치베이스로 데이터를 옮기는 방법에 대해 살펴보겠습니다.
소스 오라클 데이터베이스
소스 데이터베이스의 경우 다음을 사용하겠습니다. 스윙벤치. Oracle용 합성 워크로드 생성기입니다. 이 유틸리티는 독립형이며 실제 프로덕션 애플리케이션에서 볼 수 있는 것과 유사한 스키마를 생성합니다. 이 블로그에서는 이 유틸리티가 생성하는 단순 주문 항목(SOE) 스키마를 사용하겠습니다. SOE 스키마의 시각적 표현은 아래에서 볼 수 있습니다. 스케일 매개변수를 1 를 사용하면 약 1,500만 개의 레코드가 포함된 데이터 세트가 생성됩니다.
데이터 가져오기
Oracle에서 Couchbase로 데이터를 마이그레이션하려면 다음을 사용합니다. cbperf 데모 도구. 이 유틸리티는 주로 Couchbase를 위한 무작위 합성 스키마를 생성하지만, 외부 데이터 소스에서 플러그인을 통해 Couchbase로 데이터를 가져올 수도 있습니다. 다음용 Oracle 플러그인 cbperf 는 연결 사용자가 사용할 수 있는 모든 테이블을 복제하고, 연결된 테이블 데이터를 복사하며, 각 테이블에 대해 인덱싱된 열을 추출하여 Couchbase에 인덱스를 다시 생성합니다.
1 |
% bin/cb_perf 가져오기 -h cbhost -b soe -s soe -P 오라클 -V 연결=soe/soe@오라호스트/testdb |
SOE 스키마가 기본 사용자 이름과 비밀번호로 설정되었다고 가정합니다. soe 그리고 soe를 각각 입력하면 이 구문은 데이터베이스 SID에서 데이터를 내보냅니다. testdb 호스트에서 오라호스트 를 클릭하고 Couchbase 버킷으로 가져옵니다. soe 범위 포함 soe 여기서 클러스터의 한 노드는 cbhost.
카우치베이스의 데이터
중요한 고지 사항을 미리 말씀드리겠습니다. 프로덕션 애플리케이션의 경우, 데이터와 인덱스를 단순히 '리프트 앤 시프트'하는 것은 원하지 않을 것입니다. 대신, 필요한 애플리케이션 변경과 함께 Couchbase에서 최적의 구성을 결정하기 위해 분석을 수행해야 합니다. 궁극적인 노력의 수준은 애플리케이션에 따라 달라집니다.
즉, 일단 cbperf 가져오기가 완료되면 Couchbase에 약 1,500만 개의 문서가 있게 됩니다. 그리고 soe 범위에는 오라클의 각 테이블에 해당하는 컬렉션이 있습니다.
다음은 Oracle의 테이블입니다:
다음은 Couchbase의 컬렉션입니다:
Oracle 데이터베이스에 있던 각 행은 이제 Couchbase에서 문서가 됩니다. 문서 키는 컬렉션 이름과 콜론 ":"과 순차적인 문서 번호(기본적으로 행 번호)로 구성됩니다. 문서 JSON 키는 테이블 열 이름이고 값은 해당 행의 열 값입니다.
1 |
선택 * 에서 고객 어디 CUSTOMER_ID = 1 ; |
1 |
선택 * 에서 soe.soe.customers 어디 customer_id = 1 ; |
마지막으로, Oracle 데이터베이스의 인덱싱된 열을 기반으로 자동으로 생성된 모든 인덱스를 볼 수 있습니다. 쿼리 유연성을 극대화하기 위해 각 인덱스는 하나의 열을 다룹니다.
쿼리 실행
스윙벤치 소스 코드를 살펴보다가 다음과 같은 쿼리를 발견했습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
선택 tt.order_total, tt.sales_rep_id, tt.order_date, customers.cust_first_name, customers.cust_last_name FROM (선택 orders.order_total, orders.sales_rep_id, orders.order_date, orders.customer_id, 순위() Over (주문 으로 orders.order_total DESC) sal_rank FROM 주문 어디 orders.sales_rep_id = 1 ) tt, 고객 어디 tt.sal_rank <= 10 그리고 customers.customer_id = tt.customer_id |
이 쿼리를 Oracle 데이터베이스에 대해 실행하면 다음과 같은 결과가 나타납니다:
그리고 Couchbase에서 쿼리를 실행해도 동일한 결과가 나옵니다. 쿼리에서 변경해야 했던 유일한 것은 컬렉션의 접두사를 soe.soe를 사용하여 카우치베이스 키 공간을 구성합니다.
재미있는 사실
여러분은 이미 ORACLE_SID 를 오라클 데이터베이스 인스턴스 식별자로 사용하지만, 그 속내가 무엇인지 알고 계십니까? 이것은 사이트 식별자. 로 해시됩니다. ORACLE_HOME 를 입력하여 Unix/Lux 시스템의 공유 메모리 키인 SGA(시스템 전역 영역) 키를 얻습니다. SGA 키를 받으면 ORA-01034: ORACLE을 사용할 수 없음 오류가 발생하면 이 공유 메모리 키가 시스템에 없기 때문입니다. 따라서 데이터베이스와 통신할 수 없습니다. 다행히도 Couchbase를 사용하면 작업이 훨씬 간단해져 다른 작업에 집중할 수 있습니다. 물론 운영 체제 내부를 좋아하지 않는다면 말입니다.
결론
어려운 작업처럼 보일 수 있지만, 관계형 데이터베이스에서 Couchbase로 데이터를 가져오는 것은 그리 어렵지 않습니다. 물론 열과 인덱스뿐만 아니라 저장 프로시저(Couchbase의 사용자 정의 함수)와 같이 고려해야 할 사항이 더 많지만, 충분히 할 수 있는 작업입니다.