lightcouch APIを使用 して、Javaを介してcouchdbに接続しています。dbclient.save(object)メソッドを使用して単一のドキュメントを保存できます。ただし、私の要件は、一度に大量のドキュメントを保存することです。LightcouchAPIを使用したバルクドキュメントの保存に関連するメソッドが見つかりません。考えられる解決策を提案してください。
前もって感謝します!
lightcouch APIを使用 して、Javaを介してcouchdbに接続しています。dbclient.save(object)メソッドを使用して単一のドキュメントを保存できます。ただし、私の要件は、一度に大量のドキュメントを保存することです。LightcouchAPIを使用したバルクドキュメントの保存に関連するメソッドが見つかりません。考えられる解決策を提案してください。
前もって感謝します!
やってみることにしました。個人を説明するドキュメントを保持するデータベースがあります。
LightCouchを拡張する私のPerson
クラスは次のとおりです。Document
public class Person extends Document {
private String firstname = "";
private String lastname = "";
private int age = -1;
public Person(String firstname, String lastname, int age) {
super();
this.setFirstname(firstname);
this.setLastname(lastname);
this.setAge(age);
}
// setters and getters omitted for brevity
}
アルゴリズムは単純です。
Document
コードは大まかに次のようになります。
注: 簡潔にするために、try/catch は省略されています。もちろん、あなたはそれらを使用することが期待されています。
public static void main(String[] args) {
// You could also use a List and then convert it to an array
Document[] docs = new Document[2];
docs[0] = new Person("John", "Smith", 34);
docs[1] = new Person("Jane", "Smith", 30);
DefaultHttpClient httpClient = new DefaultHttpClient();
// Note the _bulk_docs
HttpPost post = new HttpPost("http://127.0.0.1:5984/persons/_bulk_docs");
Gson gson = new Gson();
StringEntity data =
new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}");
data.setContentType("application/json");
post.setEntity(data);
HttpResponse response = httpClient.execute(post);
if (response.getStatusLine().getStatusCode() != 201) {
throw new RuntimeException("Failed. HTTP error code: "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
}
この例で注目すべき 2 つの部分について説明します。
まずは資料集めです。この場合List
、例では a の代わりに配列を使用しました。
Document[] docs = new Document[2];
docs[0] = new Person("John", "Smith", 34);
docs[1] = new Person("Jane", "Smith", 30);
List
同様にa を使用し、後で Java のユーティリティ メソッドを使用して配列に変換することもできます。
2 つ目はStringEntity
. HTTP Bulk Document APIに関するCouchDB のドキュメントによると、単一のリクエストで複数のドキュメントを変更する場合、リクエスト本文の JSON 構造は次のようになります。
{
"docs": [
DOCUMENT,
DOCUMENT,
DOCUMENT
]
}
StringEntity
これがやや醜い定義の理由です。
StringEntity data = new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}");
応答として、挿入されたドキュメントの *_id* と *_rev* を表すフィールドとトランザクション ステータス インジケーターを含むオブジェクトを含む JSON 配列を取得します。