java - Java 中最高性能的数据库

标签 java database performance embedded-database

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

纯 JDBC/数据库组合

JDO

JPA/ORM/数据库组合

对象数据库

其他存储机制

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

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

最佳答案

你可以尝试像 Prevayler 这样的东西(基本上是一个内存中的缓存,可以为您处理序列化和备份,以便数据持久存在并且在事务上是安全的)。还有其他类似的项目。 我已经将它用于一个大型项目,它安全且速度极快。

如果它是同一组 20,000 个对象,或者至少不是每 5 秒 20,000 个新对象但有很多更改,您最好缓存更改并定期以批处理模式写入更改(jdbc 批处理更新要快得多比单独的行更新)。取决于您是否需要对每次写入进行事务包装,以及您是否需要更改日志的记录或只是聚合更改。

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

关于java - Java 中最高性能的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/439958/

相关文章:

java - 减少列表<CompletableFuture<T>>

java - Hibernate 可以对不同于字段名称的实体属性使用逻辑名称吗?

ios - FIREBASE 数据库 - 将唯一键存储到子节点(Swift/IOS)

Java:如何有效地从数据库中读取?

linux - 如何观察 Linux 上进程的 TCP 连接变量?

mySQL 效率问题 - 如何找到规范化的正确平衡...?

java - 我需要创建一个程序,用于在已创建的学生、本科生和研究生类(class)中添加、删除、列出、保存和排序学生

java - 将枚举的 ArrayList 转换为 String

database - 使用来自 mysql 转储的授权填充 mysql 数据库

PHP - 页面只允许一个管理员注册