1

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

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

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

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

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

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

4

2 回答 2

0

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

于 2013-09-14T16:19:25.173 回答
0

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

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

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

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

于 2013-09-14T19:47:42.370 回答