Couchbase - 通过 Java 批量插入
Couchbase - Bulk insert via Java
简介
我目前正在开发一个使用 Couchbase 作为数据库的 Java 项目。作为其中的一部分,我开始通过 json 文件和 csv 文件创建大量数据插入。
问题
我想知道,实现这一目标的最佳方法是什么?是否可以提供示例代码?
CSV 转换:
基准:
你有几个库来执行 CSV <-> Java object 之间的转换,这里是不同库的基准:
Library
Read (rec/sec)
Write (rec/sec)
Dependencies
Size (KiB)
Commons CSV
1,128,102
3,354,703
no
50
FastCSV
4,738,726
5,034,953
no
31
Jackson CSV
3,770,602
3,995,294
yes
2,040
Java CSV
1,922,189
2,732,843
no
13
Opencsv
1,085,935
1,808,982
yes
2,625
Sfm+ASM
5,164,967
1,901,154
yes
1.498
Sfm-ASM
4,652,517
1,901,154
yes
1,498
Super CSV
1,406,090
1,730,984
no
96
Univocity
3,594,900
4,050,255
no
437
有关此基准的更多信息,您可以访问此站点:https://github.com/osiegmar/JavaCsvBenchmarkSuite#results
FastCSV:
使用 header
迭代读取一些 CSV 数据
NamedCsvReader.builder().build("header 1,header 2\nfield 1,field 2")
.forEach(row -> row.getField("header 2"));
有关 FastCSV 的更多信息,您可以访问此站点:https://github.com/osiegmar/FastCSV
JSON 转换:
基准:
你有几个库来执行 Json <-> Java object 之间的转换,这里是不同库的基准:
有关此基准的更多信息,您可以访问此站点:https://github.com/ngs-doo/dsl-json
jackson-databind:
从 json 字符串转换为 java object:
String json = "{\"name\":\"Hassan\",\"age\":23}";
Person person = new ObjectMapper().readValue(json, Person.class);
有关jackson-databind的更多信息,您可以访问此站点:https://github.com/FasterXML/jackson-databind
CouchBase 插入:
Java 中的批量插入示例:
protected void doWork() {
final String key = "javaDevguideExampleBulkInsert";
// Create a JSON document content
final JsonObject content = JsonObject.create().put("item", "A bulk insert test value");
// Describe what we want to do asynchronously using RxJava Observables:
ReactiveCollection reactiveCollection = collection.reactive();
Flux<MutationResult> resultFlux = Flux.range(0, 10)
.map(index -> { return key + "_" + index; })
.flatMap(k -> reactiveCollection.upsert(k, content));
resultFlux.subscribe(System.out::println);
}
此代码来自 CouchBaseofficial docs-sdk-java
简介
我目前正在开发一个使用 Couchbase 作为数据库的 Java 项目。作为其中的一部分,我开始通过 json 文件和 csv 文件创建大量数据插入。
问题
我想知道,实现这一目标的最佳方法是什么?是否可以提供示例代码?
CSV 转换:
基准:
你有几个库来执行 CSV <-> Java object 之间的转换,这里是不同库的基准:
Library | Read (rec/sec) | Write (rec/sec) | Dependencies | Size (KiB) |
---|---|---|---|---|
Commons CSV | 1,128,102 | 3,354,703 | no | 50 |
FastCSV | 4,738,726 | 5,034,953 | no | 31 |
Jackson CSV | 3,770,602 | 3,995,294 | yes | 2,040 |
Java CSV | 1,922,189 | 2,732,843 | no | 13 |
Opencsv | 1,085,935 | 1,808,982 | yes | 2,625 |
Sfm+ASM | 5,164,967 | 1,901,154 | yes | 1.498 |
Sfm-ASM | 4,652,517 | 1,901,154 | yes | 1,498 |
Super CSV | 1,406,090 | 1,730,984 | no | 96 |
Univocity | 3,594,900 | 4,050,255 | no | 437 |
有关此基准的更多信息,您可以访问此站点:https://github.com/osiegmar/JavaCsvBenchmarkSuite#results
FastCSV:
使用 header
迭代读取一些 CSV 数据NamedCsvReader.builder().build("header 1,header 2\nfield 1,field 2")
.forEach(row -> row.getField("header 2"));
有关 FastCSV 的更多信息,您可以访问此站点:https://github.com/osiegmar/FastCSV
JSON 转换:
基准:
你有几个库来执行 Json <-> Java object 之间的转换,这里是不同库的基准:
有关此基准的更多信息,您可以访问此站点:https://github.com/ngs-doo/dsl-json
jackson-databind:
从 json 字符串转换为 java object:
String json = "{\"name\":\"Hassan\",\"age\":23}";
Person person = new ObjectMapper().readValue(json, Person.class);
有关jackson-databind的更多信息,您可以访问此站点:https://github.com/FasterXML/jackson-databind
CouchBase 插入:
Java 中的批量插入示例:
protected void doWork() {
final String key = "javaDevguideExampleBulkInsert";
// Create a JSON document content
final JsonObject content = JsonObject.create().put("item", "A bulk insert test value");
// Describe what we want to do asynchronously using RxJava Observables:
ReactiveCollection reactiveCollection = collection.reactive();
Flux<MutationResult> resultFlux = Flux.range(0, 10)
.map(index -> { return key + "_" + index; })
.flatMap(k -> reactiveCollection.upsert(k, content));
resultFlux.subscribe(System.out::println);
}
此代码来自 CouchBaseofficial docs-sdk-java