2012-11-14 74 views
0

我正在开发一个GWT应用程序。HSQLDB如何插入100万条记录

为了测试我的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

+0

[Here](http://stackoverflow.com/questions/10293517/hypersql-hsqldb-massive-insert-performance)你可以找到类似问题的答案。 – ShyJ

回答

0

由于您使用CREATE内存表,所有的数据都存储在内存中。您可能不得不增加Java堆分配以存储数据。

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

+0

但是,如果我使用缓存表,我依赖于I/O。无论如何,我选择了MEMORY表并增加了我的Java堆空间。 – nixspirit

+0

这是您的选择,哪种类型的桌子更适合您的应用。 – fredt