MariaDb ColumnStore 批量插入

MariaDb ColumnStore BulkInsert

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

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。我的问题是让其他人 运行 参与其中,如果是这样,如何避免这种情况。谢谢!

感谢您的 post。您在 javamcsapi 的内存管理中遇到了两个尚未修复的错误。这些错误是由于使用 Swig 生成 Java 和我们的基础 C++ API mcsapi.

之间的绑定造成的

第一个错误是,一旦不再需要 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/