Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中性能最高的数据库_Java_Database_Performance_Embedded Database - Fatal编程技术网

Java中性能最高的数据库

Java中性能最高的数据库,java,database,performance,embedded-database,Java,Database,Performance,Embedded Database,我需要在Java中实现(真正)高性能内存数据库/存储机制的想法。在存储20000多个java对象的范围内,每5秒左右更新一次。 我有以下几种选择: 纯JDBC/数据库组合 JDO JPA/ORM/数据库组合 对象数据库 其他存储机制 我最好的选择是什么?你的经历是什么 编辑:我还需要能够查询这些对象试试下面的方法,它在Hibernate和其他ORM框架中运行得非常好 如果要将所有数据存储在内存中,可能需要查看 我自己从来没有使用过它,但对于所有数据都可以存储在内存中的情况,它似乎比使用关系数据库

我需要在Java中实现(真正)高性能内存数据库/存储机制的想法。在存储20000多个java对象的范围内,每5秒左右更新一次。
我有以下几种选择:

纯JDBC/数据库组合

JDO

JPA/ORM/数据库组合

对象数据库

其他存储机制

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


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

试试下面的方法,它在Hibernate和其他ORM框架中运行得非常好


如果要将所有数据存储在内存中,可能需要查看


我自己从来没有使用过它,但对于所有数据都可以存储在内存中的情况,它似乎比使用关系数据库要好得多。

我不知道它是否是最快的选择,但无论何时使用它,我都非常满意。它是由最初编写高超音速(后来成为HSQLDB)的同一个人编写的


另一个据称速度非常快的选项是。

您可以尝试类似的方法(基本上是内存中的缓存,它可以为您处理序列化和备份,从而使数据持久化并在事务上安全)。还有其他类似的项目。 我曾在一个大型项目中使用过它,它安全且速度极快

如果是同一组20000个对象,或者不是每5秒至少20000个新对象,而是大量更改,那么最好缓存更改并以批处理模式定期写入更改(jdbc批处理更新比单个行更新快得多)。这取决于是否需要对每次写入进行事务性包装,以及是否需要更改日志记录或只是聚合更改

编辑:正如其他帖子提到的Prevayler,我想我应该留下一个关于它的说明:
基本上,您可以创建一个可搜索/可序列化的对象(通常是某种类型的映射),该对象包装在一个Prevayler实例中,并序列化到磁盘。您可以通过向Prevayler实例发送更改的可序列化记录(仅包含更改指令的对象)来进行更改,而不是直接对地图进行更改。Prevayler版本的事务是将序列化更改写入磁盘,以便在发生故障时加载最后一次完整备份,然后根据该备份重播更改。它是安全的,尽管您必须有足够的内存来加载所有数据,而且它是一个相当旧的API,因此不幸的是,没有通用接口。但绝对稳定,并按广告宣传的那样工作

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


编辑:请注意,Prevayler不是一个数据库,请参阅。如果你没有RAM,你就没有运气了

是一个快速内存数据库,对于简单的对象图非常有用。

Terracotta也可能是您的答案。它允许多个虚拟机共享对象,以便您可以分配负载等。

我强烈建议。这是由一位原始作者完成的HSQLDB的“第二代”版本H2允许我们对DAO层进行单元测试,而不需要实际的PostgreSQL数据库,这是非常棒的


有一个活跃的网络组和邮件列表,作者Thomas Mueller对查询非常敏感(哈哈,这里有一个小双关语)。

您可以尝试(在开源和企业版下提供),它比基于磁盘的数据库系统提供了30倍的性能改进,并提供了JDBC接口。它可以配置为独立的主存数据库,也可以作为MySQL、Postgres、Oracle数据库的透明缓存。

您还可以查看H2真是太棒了,事实上,在内存、普通服务器和事务中,您拥有一切。但是,它的性能与对象数据库不相比较,我看到前面提到的Db4o,事实上,我在Neodatis上的性能要好得多,而且一切都很好地设置在Maven存储库中。虽然不像法拉利那样强劲,但速度很快,但不像甲骨文那样像卡车。

我想尝试一下。

这是一个老问题,但现在有很多数据库的性能级别为20000/s。选择哪个数据库取决于数据结构和要进行的查询类型。它还取决于总容量

我们在处理大量时间序列数据(大约300000 rec/s)时遇到了类似的问题,我们最终编写了一个新的数据库,该数据库具有足够简单的API和良好的性能。它可以每秒写2000000个对象,我们没有使用ORM

它后来演变成。

是一个可嵌入的纯Java持久数据库,提供了一个简单的
Java.util.Map
接口。它每秒可承受来自单个线程的约100万次查询/更新,具有一致的读/写性能,并且几乎与机器中的内核数成线性关系

以下是一些最近的绩效研究和实际数据:


Prewayler不是数据库:取决于您对“数据库”的定义。它肯定不是关系数据库,但它似乎符合数据库的最低定义。嗯,我想这是真的。我的意思是,它只能保存RAM中的尽可能多的数据。网站上的文档不是非常广泛,但库下载包含演示。使用起来非常简单。BDB不是内存中的数据库,而是磁盘备份的数据库。很明显,它可以将大部分内容缓存在内存中,就像所有生产就绪的DBs一样,但我不知道它是否具有仅内存模式。