2013-09-16 167 views
0

我试图建立一个开源project提供易于访问的机器学习数据集,其捆绑在一个易于访问的方式对数据极为缓慢。基本上,我有代码,它的原始数据转换成HSQLDBfile DB,产生*.data*.properties,和*.script文件。然后我拿这3个文件,把它们放在我的Maven项目的src/main/resources中,然后构建一个jar文件。取决于此jar的应用程序可以访问HSQLDB数据库作为数据库。访问HSQLDB“资源”捆绑数据库中的jar资源是

从技术上讲,我没有任何问题可以完成所有工作。但是,访问数据非常缓慢。奇怪的是,如果我有数据集项目和一个项目取决于数据集都在Eclipse中打开并从那里运行,它就像预期的那样快。这意味着问题与HSQLDB文件被破坏有关。另一个线索是,数据库越大,访问数据所需的时间(看似)呈指数级地延长。

我试着给出JVM ARGS内存和烫发空间的碰撞。我也尝试在*.properties文件中设置各种HSQLDB标志。

任何想法??

编辑:我也有罐子压缩断开利用在行家-JAR-插件定义的<compress>false</compress>元件。

+2

罐子被压缩。我认为缓慢是由于通过'ClassLoader'从Jar内部访问文件的开销。许多库(包括[Struts2](http://struts.apache.org/release/2.1.x/docs/performance-tuning.html))建议将资源复制到文件系统位置。也许把你的资源移动到'java.io.temp'? –

+0

我忘记提及我在'maven-jar-plugin'定义中使用' false'元素关闭了jar压缩。压缩与否是没有区别的。不过,你的想法值得尝试。谢谢。 – herrtim

回答

0

我尝试了很多事情,包括为在HSQLDBforum建议设置缓存大小和高速缓存行。最后我解决这个问题,解决方法如上由Boris the Spider建议,这就是:

  1. java.io.temp创建一个临时目录。
  2. 将DB文件移出jar并放入临时目录。
  3. 使用fileHSQLDB数据库使用这些文件。
  4. 之后通过删除临时目录进行清理。

工作就像一个魅力。有点破解,但至少它有效。