<分区>
我正在开发一个处理大量(约 1.000.000)键值对的 Java 应用程序。键的大小固定,而值的大小从 20 字节到 ~1 KB 不等。所以在最坏的情况下,我得到了大约 1 GB 的数据。
键值对由多个线程(~ 3-5 个线程)同时读取和写入。在大多数情况下,读取和写入操作只影响单个键值对。
在键值对之上放置了一个关系数据模型,用于选择所需的键。目前我正在使用 H2对于关系数据,但我不清楚使用哪种技术来存储键值对。
- 我应该使用哪个数据库来存储键值对?
- 是 Berkeley DB适合我的情况吗?
此外,更重要的是,我应该在哪个级别上实现同步?
- 数据库层对我来说似乎很明智,但我应该如何处理应用程序中的连接管理?
- 我的第一个方法
- 为每个读/写操作使用一个连接池和一个单独的连接。
虽然这很容易实现,但在我看来,连接池的同步成为瓶颈。
- 为每个读/写操作使用一个连接池和一个单独的连接。
- 我的第二个解决方案
- 对所有读取操作使用一个连接,对所有写入操作使用另一个连接,但我不确定该连接是否允许并发访问以及它是否以可扩展的方式对它们进行序列化。
由于 JTables 定期查询键值对,因此访问时间很关键。我应该信任数据库的缓存系统还是在应用程序层上实现/使用另一个缓存,例如EHCache?
编辑:
该应用程序应在较旧的 PC 上运行,因此我无法将整个数据放入内存。
将键值对存储在现有的 H2 数据库中是可能的,但为了更好的性能,将它们放入专门用于键值对及其同步的数据库中不是更有意义吗?
我也不关心 ACID 属性。