我需要用 Java 实现(真正)高性能内存数据库/存储机制的想法。在存储20,000+ java对象的范围内,每5秒左右更新一次。
我愿意接受的一些选择:

纯 JDBC/数据库组合

联合数据组织

JPA/ORM/数据库组合

对象数据库

其他存储机制

我最好的选择是什么?你有什么经历?

编辑:我还需要能够查询这些对象

有帮助吗?

解决方案

您可以尝试像 Prevayler (基本上是在内存中缓存处理序列化和备份对你那么数据仍然存在,并且是事务安全)。还有其他类似的项目。 我已经使用了一个大型项目,它的安全和速度极快。

如果它是同一套20000个的对象,或至少每5秒,但很多的变化不20,000个新的对象,你可能会更好cacheing的变化,并定期编写批处理模式的变化(JDBC批处理更新速度更快不是单个行更新)。取决于你是否需要在每个写在事务处理包裹,以及是否需要更改日志或只是总的变化的记录。

修改:为其他职位都提到Prevayler我想我会留下一张纸条上它做什么: 基本上你创建一个搜索/序列化对象(通常是地图某种),它被包裹在一个Prevayler实例,这是序列化到磁盘。而不是直接更改您的地图,让您通过发送你的改变你的Prevayler实例的序列化的记录(只包含变更指示的对象)的变化。 Prevayler的版本事务的是写你的序列化到磁盘的变化,这样在发生故障的情况下,它可以载入上次完全备份,然后重播反对的更改。它是安全的,但你必须有足够的内存来加载所有的数据,这是一个相当老的API,所以没有通用接口,很遗憾。但绝对稳定,像宣传的那样。

其他提示

我高度推荐的 H2 即可。这是一种由原始作者之一所做HSQLDB的“第二代”的版本。的 H2 可让我们单元测试我们的DAO层,而不需要实际的PostgreSQL数据库,这是的真棒

有一个是活性基团净和邮件列表,作者托马斯·穆勒是非常敏感的查询(哈,小双关语那里。)

我不知道这是否是最快的选项,但我已经很满意 H2 每当我用它。这是写的谁原来写超音速(即后来的HSQLDB)。同一个人

这是据称非常快的另一种选择是 Prevayler

这是一个有点老问题,但这些天有一大堆具有的20,000 / s的性能水平的数据库。哪个数据库选择依赖于数据结构和查询的类型,你想进行决策。它也取决于总体积。

我们也有类似的问题,大量的时间序列数据,约300,000 REC /秒,我们最后写一个新的数据库 NFSdb ,有足够简单的API和不俗的表现。它可以做约2,000,000对象写入/ s和我们所做的远没有ORM。存储API看起来是这样的:

JournalFactory factory = new JournalFactory("/mnt1/data/tick");

MyObject o = new MyObject();
try (JournalWriter<MyObject> writer = factory.writer(MyObject.class)) {

   o.setBlah(...);
   writer.append(o);

   // more appends here
   //
   writer.commit();
}

尝试下文中,与Hibernate和其他ORM框架执行得很好

http://hsqldb.org/

我想给一个尝试 OrientDB

编年史地图 是一个嵌入的纯Java持久数据库,提供一个简单的 java.util.Map 接口。它承受约 1万 查询/更新每秒 从一个单一的线, 一致的读写能和尺度几乎成线性的核心数在机。

这里是最近的一些性能的研究与实际数字:

秦始皇也可能是为你找出答案。它允许多个虚拟机共享对象,以便可以分配负载等...

您还可以检查出 db4o的

如果你想保存所有内存数据,你可能想看看 Prevayler

我从来没有用它自己,但看起来比使用关系型数据库中,所有的数据都可以存储在内存中的情况下,更好的解决方案。

伯克利DB为Java 是在存储器中的快数据库,对于简单的对象图是非常有用的。

hsqldb 相当快,但它不是 ACID 事务安全的。我知道的最快的 java 数据库是 db4o: 基准.

编辑:请注意 Prevayler 不是数据库,请参阅 http://www.prevayler.org/wiki.jsp?topic=PrevaylerIsNotADatabase. 。如果你的内存不足,那你就不走运了。

H2是真正梦幻般的,的确,在内存中,正常的服务器和交易,你拥有这一切。然而,它没有在性能上比较的对象数据库,我看到了db4o提到的,我曾与Neodatis其实更好的性能,并很好地设置一切在Maven仓库。虽然不是很健壮,像法拉利,速度快,但并不像甲骨文的卡车。

您可以尝试 CSQL (下开源和企业版中提供)它基于磁盘上提供30倍的性能提升数据库系统,并提供JDBC接口。它可以被配置为独立的主存储器数据库或作为透明的高速缓存到MySQL,Postgres的,Oracle数据库的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top