【问题标题】:Couchbase - Bulk insert via JavaCouchbase - 通过 Java 批量插入
【发布时间】:2022-01-19 14:57:46
【问题描述】:

简介

我目前正在开发一个使用 Couchbase 作为数据库的 Java 项目。作为其中的一部分,我开始通过 json 文件和 csv 文件创建海量数据插入。

问题

我想知道,实现这一目标的最佳方法是什么?是否可以提供示例代码?

【问题讨论】:

  • 如果您有 CSV 文件,您可能需要考虑使用 cbimport 代替 docs.couchbase.com/server/current/tools/cbimport-csv.html
  • 感谢您的回答,但我需要在插入 csv 文件之前对其进行格式化并报告每个错误的元组。我参与的项目使用 Quarkus API 进行所有交互。我无法访问主服务器上的控制台。

标签: java couchbase bulkinsert


【解决方案1】:

CSV 转换:

基准测试:

你有几个库来执行 CSV Java 对象之间的转换,这里是不同库的基准:

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 对象之间的转换,这里是不同库的基准:

有关此基准的更多信息,您可以访问此站点:https://github.com/ngs-doo/dsl-json

杰克逊数据绑定:

json字符串到java对象的转换:

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);
}

此代码来自 CouchBase 的 official docs-sdk-java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多