gpt4 book ai didi

java - MariaDb 列存储批量插入

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:45 24 4
gpt4 key购买 nike

我正在编写一些使用批量插入的代码,看起来像这样:

ColumnStoreBulkInsert b = d.createBulkInsert("pst", "events", (short) 0, 0); 
try {
for (Map<String, Object> record : records) {
try {
for (int i = 0; i < schema.length; i++) {
Object value = record.get(schema[i].toLowerCase());
String val = value.toString();
b.setColumn(i, val);
}
b.writeRow();
if (currentBatchSize >= batchSize) {
b.commit();
currentBatchSize = 0;
}
}
catch (ColumnStoreException e) {
b.rollback();
}
}
}
catch(Exception e) {
throw new RuntimeException(e);
}

我遇到的问题是,当我运行这个时,我耗尽了内存(看起来),因为我每次都必须创建一个新的 ColumnStoreBulkInsert 。我的问题是其他人是否也遇到过这种情况,如果是的话,如何避免这种情况。谢谢!

最佳答案

感谢您的帖子。您在 javamcsapi 的内存管理中遇到了两个尚未修复的错误。这些错误是由于使用 Swig 生成 Java 和我们的基本 C++ API mcsapi 之间的绑定(bind)而导致的。

第一个错误是,一旦不再需要 Java 包装器 ColumnStoreBulkInsert 对象,Java 中的自动垃圾收集就不会收集 C++ ColumnStoreBulkInsert 对象。它在我们的错误跟踪器 Jira 中记录为 MCOL-1407 [1]。

通常,您可以通过其包装对象的delete() 方法调用相关C++ 对象的手动垃圾回收。不幸的是,在我们的 javamcsapi 版本 1.1.5 中,ColumnStoreBulkInsert 也被破坏了。我在错误跟踪器 Jira [2] 中将其记录为 MCOL-1588,并且刚刚提交了一个补丁,该补丁将成为我们 1.1.6 版本的一部分。

一旦该补丁通过了我们的内部质量保证机制,您就可以从我们的 Github 存储库 [3] 编译 javamcsapi 的开发版本,等待 1.1.6 版本,或者从我们的夜间存储库服务器下载 mcsapi 的编译版本 [4]。

下面是如何通过 ColumnStorBulkInsert 的 delete() 方法进行手动垃圾回收的示例。

import com.mariadb.columnstore.api.*;

public class MCSAPITest {

public static void main(String[] args) {
ColumnStoreDriver d = new ColumnStoreDriver();
for(int i=0; i<Integer.MAX_VALUE; i++){
ColumnStoreBulkInsert b = d.createBulkInsert("test", "garbage_test", (short)0, 0);
try{
b.setColumn(0, i);
b.setColumn(1, Integer.MAX_VALUE-i);
b.writeRow();
b.commit();
} catch(ColumnStoreException e){
b.rollback();
e.printStackTrace();
} finally{
b.delete(); //<--This is the important part
}
}
}
}

如果您有任何其他问题,请随时回复。

[1] https://jira.mariadb.org/browse/MCOL-1407

[2] https://jira.mariadb.org/browse/MCOL-1588

[3] https://github.com/mariadb-corporation/mariadb-columnstore-api/tree/develop-1.1

[4] http://34.238.186.75/repos/1.1.6-1/nightly/mariadb-columnstore-api/yum/centos/7/x86_64/

关于java - MariaDb 列存储批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51485381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com