Talvez você se lembre da minha postagem sobre Movendo dados do CouchDB para o Couchbase. Se você não estiver usando o CouchDB, mas o MongoDB, talvez tenha se sentido decepcionado. Eu sinto muito. Vamos consertar isso. Veja como mover seus dados do MongoDB para o Couchbase.
Uma das vantagens de usar o RxJava é que essa API está se tornando mais difundida. Fizemos essa escolha há algum tempo e estamos felizes em ver mais pessoas se juntarem a ela, como o Mongo fez recentemente.
O fato de compartilharmos uma API de fluxo facilitará muito as coisas. Meu objetivo é obter um Observable de Documento Mongomapear para documentos do Couchbase e, em seguida, gravá-los no Couchbase. Como você pode ver, esse processo é muito fácil de modelar com o RxJava. Em pseudocódigo, seria parecido com:
getMongoCollectionStream().fromMongoDocumentToCouchbaseDocuments().writeCBdocToCouchbase()
Novamente, isso se encaixa muito bem no RxJava.
O MongoDB permite que você abra uma coleção e a retorne como um Observable of Document. Isso é exatamente o que precisamos e pode acontecer em algumas linhas:
1 2 3 |
MongoCliente cliente = MongoClientes.criar(connectionString); MongoDatabase db = cliente.getDatabase(dbName); Observável mongoDocs = db.getCollection(collectionName).encontrar(); |
Em seguida, precisamos transformar os documentos que chegam em documentos do Couchbase. Podemos usar facilmente o operador de mapa Rx para fazer isso. Ao escrever um documento no couchbase, você precisa de uma chave ou de um ID. Em um documento do Mongo, ele é armazenado no campo _id usando a abstração ObjectID. Ele é gerado pelo Mongo com base em vários critérios. Depois de obter esse id, tudo o que precisamos fazer é obter o Doc como uma string JSON e criar um RawJsonDocument com base nisso e no id.
1 2 3 4 5 6 7 8 9 10 |
db.getCollection(collectionName).encontrar().toObservable() .mapa(novo Func1<org.bson.Documento, Documento>() { público Documento chamada(org.bson.Documento mongoDoc) { mongoDoc.colocar(typeField, tipo); RawJsonDocument d = RawJsonDocument.criar(mongoDoc .getObjectId("_id").toHexString(), mongoDoc .toJson()); retorno d; }; }); |
Depois dessa operação map.operation, ficamos com um observável do documento do couchbase. A última etapa é gravá-lo no Couchbase.
1 2 3 4 5 6 7 8 9 10 |
db.getCollection(collectionName).encontrar().toObservable() .mapa(novo Func1<org.bson.Documento, Documento>() { público Documento chamada(org.bson.Documento mongoDoc) { mongoDoc.colocar(typeField, tipo); RawJsonDocument d = RawJsonDocument.criar(mongoDoc .getObjectId("_id").toHexString(), mongoDoc .toJson()); retorno d; }; }).mapa(asyncBucket.upsert(doc));; |
Incluí todo esse código e o tornei configurável no couchbase-java-importer. Ele está disponível no Github aqui.
Se você não precisa fazer nada além de importar os documentos JSON de uma coleção diretamente para o Couchbase, isso deve ser suficiente. Basta baixar o arquivo binário e executá-lo, certificando-se de que o Configuração yml está em seu classpath e contém as informações corretas.
Essa é uma maneira específica de mover dados do MongoDB para o Couchbase. Há outras. Ambos os bancos de dados oferecem suporte à importação de CSV, por exemplo, e o Mongo tem um exportador de CSV. Assim, quando você tiver um arquivo CSV, poderá usar cbtransferência ou couchbase-java-importer para obter seu conteúdo no Couchbase.
Todos esses exemplos pressupõem que você não deseja fazer nenhuma transformação nos dados antes de importá-los. As etapas de transformação seriam muito fáceis de conectar no importador RxJava. O código é muito simples, portanto, sinta-se à vontade para fazer um fork dele ou enviar solicitações pull! A propósito, adicionar mais importadores a esse projeto pode ser uma ótima maneira de entrar na comunidade CB :)