我需要一些想法来在Java中实现一个(真的)高性能的内存中数据库/存储机制。在存储20,000+ java对象的范围内,每5秒左右更新一次。
以下是我可以选择的一些选项:
纯JDBC/数据库组合
JDO
JPA/ORM/数据库组合
对象数据库
其他存储机制
我最好的选择是什么?你有什么经验?
编辑:我还需要能够查询这些对象
发布于 2009-01-13 17:47:47
你可以尝试像这样的东西
Prevayler
(基本上是一个内存中的缓存,它为您处理序列化和备份,因此数据可以持久保存,并且在事务上是安全的)。还有其他类似的项目。我已经在一个大型项目中使用过它,它很安全,而且速度非常快。
如果是同一组20,000个对象,或者至少不是每5秒有20,000个新对象,而是有很多更改,那么您最好缓存这些更改并定期以批处理模式写入这些更改(jdbc批处理更新比单个行更新快得多)。这取决于您是否需要对每个写入进行事务性包装,以及您是否需要更改日志的记录或仅聚合更改。
编辑
:就像其他文章提到的Prevayler一样,我想我应该对它的作用留下一个注释:基本上你创建了一个可搜索/可序列化的对象(通常是某种类型的Map ),它被包装在Prevayler实例中,该实例被序列化到磁盘上。您可以通过向Prevayler实例发送更改的可序列化记录(只是一个包含更改指令的对象)来进行更改,而不是直接对地图进行更改。Prevayler的事务版本是将您的序列化更改写入磁盘,以便在失败的情况下,它可以加载最后一个完整的备份,然后根据该备份重放更改。它是安全的,尽管您必须有足够的内存来加载所有数据,而且它是一个相当旧的API,所以不幸的是没有通用接口。但绝对是稳定的,工作起来就像广告所说的那样。
发布于 2009-02-13 17:16:05
我强烈推荐
H2
..。这是HSQLDB的“第二代”版本,由原作者之一完成。
H2
允许我们在不需要实际PostgreSQL数据库的情况下对DAO层进行单元测试,这是
太棒了
..。
有一个活跃的网群和邮件列表,作者Thomas Mueller对查询非常敏感(哈哈,这是个小双关语)。
发布于 2009-01-13 17:47:28
我不知道这是不是最快的选择,但我对此非常满意
H2
只要我用过它。它是由最初编写Hypersonic (后来成为HSQLDB)的同一个人编写的。
另一个据称非常快的选择是
Prevayler
..。
https://stackoverflow.com/questions/439958
复制相似问题