Sql 最高性能的数据库存储机制

Sql 最高性能的数据库存储机制,sql,database,performance,storage,data-storage,Sql,Database,Performance,Storage,Data Storage,我需要实现(真正)高性能内存数据库/存储机制的想法。在存储20000多个对象的范围内,每个对象每5秒左右更新一次我想要一个FOSS解决方案 我最好的选择是什么?你的经历是什么 我主要在Java中工作,但我需要数据存储具有良好的性能,因此数据存储解决方案不需要以Java为中心 我还需要能够查询这些对象,并且需要能够在程序启动时恢复所有对象。您是每5秒更新20K对象还是每5秒更新其中一个 什么样的东西?为什么传统的RDBMS还不够?请检查并删除。Prevayler是对传统RDBMS的一种范式转换,我

我需要实现(真正)高性能内存数据库/存储机制的想法。在存储20000多个对象的范围内,每个对象每5秒左右更新一次我想要一个FOSS解决方案

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

我主要在Java中工作,但我需要数据存储具有良好的性能,因此数据存储解决方案不需要以Java为中心


我还需要能够查询这些对象,并且需要能够在程序启动时恢复所有对象。

您是每5秒更新20K对象还是每5秒更新其中一个


什么样的东西?为什么传统的RDBMS还不够?

请检查并删除。Prevayler是对传统RDBMS的一种范式转换,我在许多项目中使用过这种范式(也就是说,不是特别的Prevayler),并发现它有真正的优点。

具体取决于您需要如何查询它,但您是否研究过memcached

如果您使用的是PHP,其他选项可能包括

关于项目/需求的更多细节会有所帮助。

内存存储

1) 一个简单的C'malloc'数组,其中所有结构都将被索引

2) 伯克莱大学:。它的速度很快,因为您构建了自己的索引(辅助数据库),并且没有需要计算的SQL表达式。

是一个开源的自包含数据库,支持内存数据库(只需连接到
:内存:
)。它有许多流行编程语言的绑定。它是一个传统的基于SQL的关系数据库,但您不需要运行单独的服务器,只需将其用作程序中的库即可。很快。我不知道它是否足够快,但也许值得一试


.

您需要什么级别的耐久性?对于大多数IO硬件来说,每5秒更新20000次,如果每次都将数据写回光盘,那么就事务数而言,这可能会很困难

如果你能承受丢失一些更新的代价,如果你的数据库和操作系统支持的话,你可以每100毫秒将其刷新到磁盘上,而不需要花费相当便宜的硬件


如果它确实是一个内存中的数据库,而您不想经常刷新到磁盘,那么这听起来很简单。我听说H2非常好,但SQLite也可以工作。一个经过适当调优的MySQL实例也可以做到这一点(但可能更复杂)

Oracle TimesTen内存数据库。请参阅:

查看此处列出的一些产品:

是一个纯Java键值存储

  • 它有很高的性能,持续性好。快速数据库不能用Java编写,这是一个神话
  • 无缝存储和加载任何可序列化的Java对象,提供一个简单的
    Map
    接口
  • LGPLv3

由于您没有太多的“表”,一个成熟的SQL数据库可能是一个过度的解决方案,索引和查询可以通过几个不同的键值存储来实现,这些键值存储由普通Java代码手动更新。编年史地图,使这些更新同时彼此隔离(如果需要)。

每5秒更新所有20000个对象。传统的RDBMS似乎没有能力跟上这一点(我可能错了),这些对象是专有的。。大约有20个左右的字段具有两个1-Many关系。我认为大多数现代RDBMS会根据内存和硬盘来处理这些关系。你会受到更多因素的制约,比如更新的性质(是一个基于集合的调用或20K个单独的调用),我还想问一下——你是否可以把ACID原则扔出窗口。许多内存中的数据库技术无法提供您想要的持久性级别,这并不是说您无法从Java中获得快速的数据库。这是因为Java永远不会为您提供最快的数据库。只要你保持平等的竞争环境,任何被解释的语言都会在性能上损失。对于某些工作负载,惰性垃圾收集实际上比显式删除(如默认的C/C++)更有效。但是,只有在那些场景中,如果不在与金属解决方案等效的平台上使用垃圾收集框架,Java才会获胜。IBM的AIX数据库仍然是金融交易领域的王者,而它不是用Java编写的,这是有原因的。