Jackcess Table Limit?



我目前正试图解决与使用jacess版本1.1.8将信息写入Access数据库的其他人编写的程序相关的问题。在应该向给定的Access表添加400万行的运行中,会发生以下异常:

08/29/2016 06:01:47 | ERROR | java.lang.IndexOutOfBoundsException
at java.nio.Buffer.checkIndex(Unknown Source)
at java.nio.HeapByteBuffer.getInt(Unknown Source)
at com.healthmarketscience.jackcess.ReferenceUsageMap.addOrRemovePageNumber(ReferenceUsageMap.java:82)
at com.healthmarketscience.jackcess.UsageMap.addPageNumber(UsageMap.java:201)
at com.healthmarketscience.jackcess.Table.newDataPage(Table.java:761)
at com.healthmarketscience.jackcess.Table.addRows(Table.java:714)
at com.healthmarketscience.jackcess.Table.addRow(Table.java:660)

从我在网上看到的,看来jackess的当前版本是2。*,所以这是可以通过使用最新版本来解决的问题,还是有一个更大的问题,即400万行太多的访问表?或者,是否有一种方法可以通过Cursor对象添加行,从而减少内存消耗?

如果有问题的应用程序对您的业务仍然很重要,那么您需要更新它以使用当前版本的jacess。到目前为止,你已经有9年多的时间了(jackess 1.1.8于2007年2月发布),从那以后事情有了一些进展。

值得注意的是,当前版本的jacess支持DatabaseBuilder#setAutoSync(false),它禁止对数据库文件的更新进行逐行刷新。(我在jackess 1.1.8的源代码中搜索了"autosync",没有找到匹配项,所以我认为当时不支持。)

对于使用jackess 2.1.3的100,000行的测试插入,setAutoSync(true)(默认)大约花费200秒,而使用setAutoSync(false)的相同代码花费8秒。

使用setAutoSync(false)进行4,000,000行的测试插入大约需要220秒,即3.5分钟多一点。根据上面的数字,没有 setAutoSync(false)的相同操作预计将花费大约5,500秒或1.5小时来完成相同的事情。

相关内容

  • 没有找到相关文章

最新更新