아마 제 포스팅을 기억하실 겁니다. 카우치DB에서 카우치베이스로 데이터 이동하기. CouchDB가 아닌 MongoDB를 사용 중이시라면 실망감을 느끼셨을 것입니다. 죄송합니다. 이 문제를 해결해 보겠습니다. MongoDB에서 Couchbase로 데이터를 이동하는 방법은 다음과 같습니다.
사용의 좋은 점 중 하나는 RxJava 이 API가 점점 더 널리 보급되고 있다는 점입니다. 저희는 오래 전에 이러한 선택을 했고, 최근 몽고처럼 더 많은 사람들이 이 대열에 합류하는 것을 보게 되어 기쁩니다.
스트림 API를 공유한다는 사실은 일을 정말 쉽게 만들어줄 것입니다. 제 목표는 다음과 같은 옵저버블을 확보하는 것입니다. 몽고 문서를 생성하고 이를 Couchbase 문서에 매핑한 다음 Couchbase에 작성합니다. 보시다시피 이 프로세스는 RxJava로 모델링하기가 정말 쉽습니다. 의사 코드로는 다음과 같이 보일 것입니다:
getMongoCollectionStream().fromMongoDocumentToCouchbaseDocuments().writeCBdocToCouchbase()
다시 말하지만 이것은 RxJava와 매우 잘 맞습니다.
MongoDB를 사용하면 컬렉션을 열고 이를 문서의 Observable로 반환할 수 있습니다. 이것이 바로 우리에게 필요한 기능이며 몇 줄이면 가능합니다:
1 2 3 |
몽고클라이언트 클라이언트 = 몽고클라이언트.create(연결 문자열); 몽고 데이터베이스 db = 클라이언트.getDatabase(dbName); 관찰 가능 몽고독스 = db.getCollection(컬렉션 이름).찾기(); |
그런 다음 들어오는 문서를 카우치베이스 문서로 변환해야 합니다. 이를 위해 Rx 맵 연산자를 쉽게 사용할 수 있습니다. 카우치베이스에서 문서를 작성할 때는 키 또는 ID가 필요합니다. Mongo 문서에서는 ObjectID 추상화를 사용하여 _id 필드에 저장됩니다. 이는 몇 가지 기준에 따라 Mongo에서 생성됩니다. 일단 ID를 얻으면 문서를 JSON 문자열로 가져와서 그 문자열과 ID를 기반으로 RawJsonDocument를 생성하기만 하면 됩니다.
1 2 3 4 5 6 7 8 9 10 |
db.getCollection(컬렉션 이름).찾기().관찰 가능() .지도(new Func1<org.bson.문서, 문서>() { public 문서 통화(org.bson.문서 몽고독) { 몽고독.put(유형 필드, 유형); RawJsonDocument d = RawJsonDocument.create(몽고독 .getObjectId("_id").toHexString(), 몽고독 .toJson()); 반환 d; }; }); |
이 map.operation이 끝나면 관찰 가능한 카우치베이스 문서가 남습니다. 마지막 단계는 이를 Couchbase에 작성하는 것입니다.
1 2 3 4 5 6 7 8 9 10 |
db.getCollection(컬렉션 이름).찾기().관찰 가능() .지도(new Func1<org.bson.문서, 문서>() { public 문서 통화(org.bson.문서 몽고독) { 몽고독.put(유형 필드, 유형); RawJsonDocument d = RawJsonDocument.create(몽고독 .getObjectId("_id").toHexString(), 몽고독 .toJson()); 반환 d; }; }).지도(비동기 버킷.업서트(doc));; |
이 코드를 모두 포함했으며 couchbase-java-importer에서 구성할 수 있도록 만들었습니다. Github에서 사용할 수 있습니다. 여기.
컬렉션에서 Couchbase로 바로 JSON 문서를 가져오는 것 외에 다른 작업이 필요하지 않다면 이것으로 충분합니다. 그냥 바이너리 를 실행하여 XML 구성 파일이 클래스 경로에 있고 올바른 정보를 포함하고 있는지 확인합니다.
이것은 MongoDB에서 Couchbase로 데이터를 이동하는 한 가지 특별한 방법입니다. 다른 방법도 있습니다. 예를 들어 두 데이터베이스 모두 CSV 가져오기를 지원하며, Mongo에는 CSV 내보내기가 있습니다. 따라서 CSV 파일이 있으면 다음을 사용할 수 있습니다. cbtransfer 또는 couchbase-java-importer를 사용하여 콘텐츠를 CouchBase로 가져올 수 있습니다.
이 모든 예제는 데이터를 가져오기 전에 데이터를 변환하지 않는다고 가정하고 있습니다. 변환 단계는 RxJava 임포터에 플러그인하면 정말 쉽게 할 수 있습니다. 코드는 매우 간단하므로 자유롭게 포크하거나 풀 리퀘스트를 보내주세요! 해당 프로젝트에 임포터를 더 추가하는 것도 CB 커뮤니티에 참여하는 좋은 방법이 될 수 있습니다 :)