首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDb ColumnStore BulkInsert

MariaDb ColumnStore BulkInsert
EN

Stack Overflow用户
提问于 2018-07-23 18:45:57
回答 1查看 115关注 0票数 1

我正在编写一些代码,它使用批量插入,如下所示:

代码语言:javascript
复制
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。我的问题是让其他人遇到这种情况,如果是的话,这是如何避免的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 20:36:29

谢谢你的帖子。您在javamcsapi的内存管理中碰到了两个尚未修复的bug。这些bug是由于使用Swig来生成C++与我们的基础之间的绑定而产生的。

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

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

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

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

代码语言:javascript
复制
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

2

3

4

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51485381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档