我需要想法来实现(真正的)高性能内存数据库/存储机制。在存储 20,000 多个对象的范围内,每个对象每 5 秒左右更新一次。 我想要一个 FOSS 解决方案。
我最好的选择是什么?你有什么经验?
我主要使用 Java 工作,但我需要数据存储具有良好的性能,因此数据存储解决方案不需要以 Java 为中心。
我还需要能够查询这些对象,并且我需要能够在程序启动时恢复所有对象。
我需要想法来实现(真正的)高性能内存数据库/存储机制。在存储 20,000 多个对象的范围内,每个对象每 5 秒左右更新一次。 我想要一个 FOSS 解决方案。
我最好的选择是什么?你有什么经验?
我主要使用 Java 工作,但我需要数据存储具有良好的性能,因此数据存储解决方案不需要以 Java 为中心。
我还需要能够查询这些对象,并且我需要能够在程序启动时恢复所有对象。
您是每 5 秒更新 20K 对象还是每 5 秒更新 20K 对象之一?
什么样的物体?为什么传统的 RDBMS 不够用?
完全取决于您需要如何查询它,但是您是否查看过 memcached?
http://www.danga.com/memcached/
如果您使用 PHP ,其他选项可能包括MySQL MEMORY Tables和APC Cache 。
有关项目/要求的更多详细信息会有所帮助。
内存存储?
1) 一个简单的 C 'malloc' 数组,所有结构都将被索引。
2)berkeleyDB:http ://www.oracle.com/technology/products/berkeley-db/index.html 。它很快,因为您构建了自己的索引(辅助数据库)并且没有要评估的 SQL 表达式。
查看此处列出的一些产品:http ://en.wikipedia.org/wiki/In-memory_database
您需要什么级别的耐用性?如果您将数据写回磁盘,则每 5 秒更新 20,000 次对于大多数 IO 硬件而言,就事务数量而言可能很困难。
如果您有能力丢失一些更新,那么您可以每 100 毫秒将其刷新到磁盘,如果您的数据库和操作系统支持这样做,那么使用相当便宜的硬件就不会出现问题。
如果它真的是一个您不想经常刷新到磁盘的内存数据库,那听起来很简单。我听说 H2 很不错,但 SQLite 也可以。一个经过适当调整的 MySQL 实例也可以做到(但可能更复杂)
Oracle TimesTen 内存数据库。请参阅: http: //www.informationweek.com/whitepaper/Business-Intelligence/Datamarts-Data-Warehouses/oracle-timesten-in-memory-databas-wp1228511232361
Chronicle Map是一个纯 Java键值存储
Map
接口由于您没有很多“表”,因此成熟的 SQL 数据库可能是一种过大的解决方案,索引和查询可以使用少数不同的键值存储来实现,这些键值存储由普通 Java 代码手动更新。如果您需要, Chronicle Map提供了使此类更新同时彼此隔离的机制。