批量将文档插入couchbase数据库,并说明如何操作


Bulk inserting documents into couchbase database with how to?

我实际上在用couchbase服务器做一点实验。

我试着读取一个mysql数据库表,从每个数据行构建一个文档,然后插入带有我用生成的id的文档

uniqid('table_name'); 

通过cUrl,方法是POST。

到目前为止,这项工作相当不错,直到脚本插入了7050个迂回文档。然后抛出一个异常->"没有缓冲区空间"。

到目前为止,我还无法解决这个问题,所以我决定收集50行数据,构建一个json_encode(d)字符串,并通过cUrl再次发布它。

到目前为止,如果我不设置id,这是有效的,但我不知道如何设置插入文档的id。

事实上,我试图用这样的格式发送我的文件:

{"docs": {
   "_id": {
          "geodata_de_54476f7e6adc57.14196038": {
              "table": "geodata_de",
              "country": "DE",
              "postal_code": "01945",
              "place_name": "Lindenau",
              "state_name": "Brandenburg",
              "state_code": "BB",
              "province_name": "",
              "province_code": "00",
              "community_name": "Oberspreewald-Lausitz",
              "community_code": "12066",
              "lat": "51.4",
              "lng": "13.7333",
              "Xco": "3861.1",
              "Yco": "943.614",
              "Zco": "4979.07"
           } 
       },  ...
   }

}

但这只是插入一个具有上述对象的文档。

也许这里有人能给我指明正确的方向。

我会使用CouchbasePHP SDK来插入这些文档,而不是使用curl。http://docs.couchbase.com/developer/php-2.0/storing.html

同样对于CB,您不必在文档本身中设置ID。这取决于情况。我可能会考虑使用您在示例中的ID("geodata_de_54476f7e6adc57.141996038"),并将其作为Couchbase中对象的密钥。那么您不一定需要_id。Couchbase中的密钥最多可以是250字节的数据,您可以使它对您的应用程序有意义,这样您就可以非常快速地按密钥进行查找。

另一种选择是,如果您将文档写入文件系统,您还可以使用专门用于批量加载文档的cbdocloader实用程序。如果您在linux上,它位于/opt/couchbase/bin/tools/cbdocloader中。