- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一些使用批量插入的代码,看起来像这样:
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/
我在 CentOS 6.4 上运行 MariaDB (10.0.2-MariaDB) 并且想使用 MariaDB 的 CONNECT-Engine 从一些日志文件中读取。由于日志文件很大,我用两个 C
MariaDB 是否支持嵌套事务(不是保存点)? 我希望能够在存储过程中使用嵌套事务。目前在 MySQL 中,我将一个参数“useTransaction”传递给每个存储过程,它控制我是否在该存储过程的
MariaDb 的默认端口是什么? 我是编程新手。我正在创建我的第一个连接到 MariaDB 的 Java 应用程序。我需要指定数据库端口。 最佳答案 Mariadb 的默认端口是 3306。 它与
ubuntu:~$ sudo apt-get install mariadb-server Reading package lists... Done Building dependency tr
我在Ubuntu 18.04上使用的是Mariadb 10.4.10,工具客户端是DBeaver 6.2.5 我想充分利用 Mariadb 中的约束检查功能来确保数据完整性,因为它是从 10.2.1
当我在 phpmyadmin 中运行这个 sql 时 SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE; 表明 @@SQL_MODE STRICT_TRANS_TABLES,E
我正在尝试使用 MariaDB 10.1.12 的联合引擎来创建基于远程数据库中的表的表。关注MariaDB instructions关于如何使用 FederatedX 实现,在数据库 db1 中我创
我在该数据库中有此列,其中包含空格键,我想更改它。 ALTER TABLE . CHANGE COLUMN `Anzahl Personen` AnzahlPersonen int(11); 在命令行
我正在尝试安装 maria db 并遇到以下问题。 [root@localhost ~]# service mysqld start Redirecting to /bin/systemctl sta
我已经基于 mariadb:10.1 构建了一个图像这基本上添加了一个新的 cluster.conf但是在第一个节点开始成功工作后,在第二个节点上面临以下错误。有人可以帮我在这里调试吗? 错误日志尾部
我已阅读 the docs用于 MariaDB REGEX_REPLACE但无法让我的查询工作。我将链接存储在一列中,link并想更改链接的结尾: 来自 www.example.com/至 www.e
我在 MariaDB 的 ColumnStore 上发现的每一项分析都声称它使用的磁盘空间比 InnoDB 等常规引擎少,例如:https://www.percona.com/blog/2017/03
如何在 MariaDB 中重置密码?我使用 Windows 而不是 Linux。谁知道如何重置我的 MySQL MariaDB 密码?我尝试在 Google 上搜索但没有帮助。 最佳答案 我遇到了同样
我正在尝试将 Quarkus 与 MariaDB 图像一起用于测试。 使用 mvn integration-test 启动测试时,我得到以下信息: Unable to start devservice
我正在尝试更新存储在 MariaDB 的 json 列中的数据(libmysql 版本 - 5.6.43,服务器:10.3.34-MariaDB-cll-lve - MariaDB 服务器)。 我的数
我有一个使用 MariaDB 中的表定义的多对多关系。我正在尝试将 Entity Framework Core 中的导航属性用于相关实体,但它们没有水合。 roles | role_id | role
Entity Framework Core 是否支持 MariaDB? 我看到它不在 supported providers 的列表中,但 MySQL 是。也许 MySQL 提供程序会针对 Maria
我在 MariaDb (10.4.10-MariaDB-1:10.4.10+maria~bionic) 中有一个巨大的表,我正在使用添加一个新列 alter table Appointment add
有没有一种方法可以监听 MySQL/MariaDB 中的数据库更改,就像您可以跟踪 MongoDB oplog 一样?我在网上找不到关于此的信息。也许它只适用于 Postgres 而不适用于 MySQ
我刚刚在 Centos 7 中安装了 MariaDB 10.3 数据库服务器。 一切顺利,但在执行“systemctl status mariadb”命令时。这是完整的输出: root@vps [/e
我是一名优秀的程序员,十分优秀!