【问题标题】:Java and SQLite optimizationJava 和 SQLite 优化
【发布时间】:2013-09-14 15:39:05
【问题描述】:

我有一个从 SQLite 数据库中提取数据的 Java servlet(在 Tomcat 中运行)。我正在使用 Xerial 驱动程序从我的 servlet 访问 SQLite 数据库。

当移动应用程序请求信息时,此 servlet 会提取数据。

该数据库仅用作只读(每天生成一次),但它包含大量数据(主表包含 200 000 行,而我还有一个超过 10 000 000 行的表)。我为经常使用的列创建了索引。

我需要建议来优化 SQLite 数据库的使用,以提高服务器的响应能力。

  1. 对于每个请求,我都会创建一个新的数据库连接,然后发送 SQL 选择、提取数据并关闭连接。这是一个好的策略吗?我可以有许多并行运行的请求。我应该使用连接池吗?怎么样?

  2. 我的 SQLite 数据库文件大约 2Gb,在我的服务器上我有很多内存 (16Gb)。由于它是一个只读数据库,我可以将其加载到内存中或增加缓存。什么是最好的策略以及如何去做?

【问题讨论】:

    标签: java sqlite optimization jdbc


    【解决方案1】:

    我因为会有很多并行请求,打开一个连接,执行操作然后关闭每个请求的连接会导致性能瓶颈。 IO 操作非常耗时。我认为您应该使用连接池。详细信息在java文档中

    http://docs.oracle.com/cd/E11882_01/java.112/e12265/manage.htm

    由于它是一个只读文件,您可以使用多线程而不需要同步开销来提高性能。

    谈到缓存,有一些技术可以确保经常使用的数据将驻留在缓存中。我不确定您是否可以拥有 2GB 的缓存。将文件加载到内存中并增加数据局部性。您可以搜索用于增加数据局部性的“缓存阻塞”和“循环平铺”技术。

    【讨论】:

      【解决方案2】:

      使用连接池更好,因为您可以并行处理许多请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多