HSQLDB如何插入100万条记录

Posted

技术标签:

【中文标题】HSQLDB如何插入100万条记录【英文标题】:HSQLDB how to insert 1 million of records 【发布时间】:2012-11-14 15:37:24 【问题描述】:

我正在开发一个 GWT 应用程序。

为了测试我的 DataGrid,我创建了一个按钮来调用我的服务器。 当我点击它时,应该将 100 万条记录插入到数据库中。

我创建了一个别名

CREATE FUNCTION PUBLIC.GENERATENAME() RETURNS VARCHAR(32768) SPECIFIC GENERATENAME_10073 LANGUAGE JAVA NOT DETERMINISTIC NO SQL CALLED ON NULL INPUT EXTERNAL NAME 'CLASSPATH:com.package.sql.Helper.generateName'

并创建了一个存储过程

CREATE PROCEDURE PUBLIC.GENERATE() SPECIFIC GENERATE_10073 LANGUAGE SQL NOT DETERMINISTIC MODIFIES SQL DATA NEW SAVEPOINT LEVEL BEGIN ATOMIC DECLARE VAL_P BIGINT;TRUNCATE TABLE PUBLIC.CONTACT;SET VAL_P=1;LOOP_LABEL:WHILE VAL_P<=1000 DO INSERT INTO PUBLIC.CONTACT VALUES VAL_P,PUBLIC.GENERATENAME(),PUBLIC.GENERATENAME();SET VAL_P=VAL_P+1;END WHILE LOOP_LABEL;END

我的桌子很简单

CREATE MEMORY TABLE PUBLIC.CONTACT(CONTACT_ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,FIRST_NAME VARCHAR(10) NOT NULL,SECOND_NAME VARCHAR(10) NOT NULL)

我测试并意识到我不能一次插入 1M 行,或者我可以吗?

插入如此大量数据的最佳方法是什么?

我使用的是 HSQLDB 2.2.4 版

【问题讨论】:

Here你可以找到类似问题的答案。 【参考方案1】:

因为你使用了 CREATE MEMORY TABLE,所以所有的数据都存储在内存中。您可能需要增加 Java 堆分配来存储数据。

对于文件数据库,您可以使用 CREATE CACHED TABLE 来减少内存使用。

【讨论】:

但是如果我使用缓存表,我依赖于 I/O。无论如何,我选择了 MEMORY 表并增加了我的 Java 堆空间。 您可以选择哪种类型的表更适合您的应用程序。

以上是关于HSQLDB如何插入100万条记录的主要内容,如果未能解决你的问题,请参考以下文章

在 DB2 表中插入 100 万条记录的最快方法是啥?

如何通过java程序更快地选择和插入百万条记录

将 100 万条记录从 SQL Server 插入 BigQuery 表,通过 CDATA odbc 驱动程序链接

HSQLDB如何手动插入记录

在 HSQLDB 中选择 100+ 百万行

oracle 插入100万条数据,更新100万条数据