Возможно, вы помните мой пост о переносе данных из CouchDB в Couchbase . Если вы используете не CouchDB, а MongoDB, возможно, вы подвели. Я прошу прощения. Давайте это исправим. Вот как перенести ваши данные из MongoDB в Couchbase.
Одной из замечательных особенностей использования RxJava является то, что этот API становится все более распространенным. Мы сделали такой выбор некоторое время назад и рады видеть, что в этот вагон приходит больше людей, как это сделал Монго в последнее время.
Тот факт, что мы совместно используем потоковый API, сделает все очень просто. Моя цель — получить документ Observable of Mongo , сопоставить его с документами Couchbase, а затем записать их в Couchbase. Как видите, этот процесс действительно легко моделировать с помощью RxJava. В псевдокоде это будет выглядеть так:
getMongoCollectionStream (). fromMongoDocumentToCouchbaseDocuments (). writeCBdocToCouchbase ()
Опять же, это очень хорошо сочетается с RxJava.
MongoDB позволяет открывать коллекцию и возвращать ее в качестве наблюдаемого документа. Это именно то, что нам нужно и может произойти в несколько строк:
MongoClient client = MongoClients.create(connectionString);
MongoDatabase db = client.getDatabase(dbName);
Observable<org.bson.Document> mongoDocs = db.getCollection(collectionName).find();
Затем нам нужно преобразовать документы, поступающие в документы Couchbase. Мы можем легко использовать оператор карты Rx для этого. При написании документа на couchbase вам нужен ключ или идентификатор. В документе Mongo он хранится в поле _id с использованием абстракции ObjectID. Он генерируется Монго на основе нескольких критериев. Как только мы получим этот идентификатор, все, что нам нужно сделать, это получить документ в виде строки JSON и создать RawJsonDocument на основе этого и идентификатора.
db.getCollection(collectionName).find().toObservable()
.map(new Func1<org.bson.Document, Document>() {
public Document call(org.bson.Document mongoDoc) {
mongoDoc.put(typeField, type);
RawJsonDocument d = RawJsonDocument.create(mongoDoc
.getObjectId("_id").toHexString(), mongoDoc
.toJson());
return d;
};
});
После этого map.operation мы остаемся с заметным документом couchbase. Последний шаг — написать это на Couchbase.
db.getCollection(collectionName).find().toObservable()
.map(new Func1<org.bson.Document, Document>() {
public Document call(org.bson.Document mongoDoc) {
mongoDoc.put(typeField, type);
RawJsonDocument d = RawJsonDocument.create(mongoDoc
.getObjectId("_id").toHexString(), mongoDoc
.toJson());
return d;
};
}).map(asyncBucket.upsert(doc));;
Я включил весь этот код и сделал его настраиваемым в couchbase-java-importer. Это доступно на Github здесь .
Если вам не нужно ничего делать, кроме импорта документов JSON из коллекции прямо в Couchbase, этого должно быть достаточно. Просто скачайте двоичный файл и выполните его, убедившись, что файл конфигурации yml находится в вашем classpath и содержит правильную информацию.
Это один из конкретных способов перемещения данных из MongoDB в Couchbase. Есть и другие. Например, обе базы данных поддерживают импорт CSV, а Mongo имеет экспортер CSV. Итак, когда у вас есть файл CSV, вы можете использовать cbtransfer или couchbase-java-importer, чтобы получить его содержимое в Couchbase.
Все эти примеры предполагают, что вы не хотите выполнять какие-либо преобразования данных перед их импортом. Пошаговое преобразование было бы очень просто включить в импортер RxJava. Код очень прост, поэтому, пожалуйста, не стесняйтесь его раскошелиться или отправить запросы на извлечение! Добавление большего количества импортеров в этот проект может быть отличным способом войти в сообщество CB.