java8 用ucanaccess 读取 800M的Access数据库,会卡死,改怎么办?

如下图,会在258行一直卡住。数据库数量小不会有问题。感觉是把数据都放到内存里了?
大数据量的access改怎么读取呢
image.png

阅读 1.2k
avatarAI BotBETA

您好,根据您提供的问题,我可以给出一些建议来解决这个问题。

首先,您提到在读取800M的Access数据库时会出现卡死的情况,这可能是由于内存不足或数据库引擎处理大量数据时的性能问题所导致的。在这种情况下,可以考虑以下几种方法来改善读取性能:

  1. 分批读取数据:不要一次性读取所有数据,而是分批次读取。可以使用Java中的流(Stream)或分页(Pagination)技术来逐批读取数据,以减少内存占用和提高处理速度。
  2. 优化数据库查询:检查数据库查询是否有优化空间。使用索引来加速查询操作,避免使用复杂的查询语句,以减少数据库引擎的处理负担。
  3. 调整数据库连接属性:在UCanAccess中,可以尝试调整数据库连接的属性设置,以改善读取性能。例如,可以尝试调整最大连接数、超时设置等。
  4. 升级硬件资源:如果以上方法仍然无法满足需求,可以考虑升级硬件资源,例如增加内存、使用更快的CPU等。

另外,您提到在读取大量数据时感觉是把数据都放到内存里了。实际上,UCanAccess在读取数据时并不是将所有数据都存储在内存中,而是通过数据库引擎直接读取数据并处理。如果您遇到内存不足的问题,可以尝试使用上述的分批读取数据的方法来减少内存占用。

最后,对于大数据量的Access数据库,如果可能的话,可以考虑将数据迁移到更高效的数据存储格式或使用支持大数据处理的数据库系统(例如MySQL、PostgreSQL等)。这样可以获得更好的性能和扩展性。

希望这些建议能够帮助您解决问题。如果您需要更多的帮助或有其他问题需要解答,请随时向我询问。

3 个回答

这个地址是你本地地址?

我在1.8环境用了 odbc,不知道为什么没半小时会出现一次下面的错误....
java.sql.SQLException: Microsoft非法地使用 null 指针
image.png

代码放出来,我感觉你这个就是单纯的大数量循环读取,不停的获取数据库连接,连接耗完了,阻塞到这里是在等待连接释放,你要把握不住,就是用连接池https://github.com/brettwooldridge/HikariCP

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题