我需要创意来实现(真正的)高性能内存数据库/存储机制。在存储20,000多个对象的范围内,每个对象每5秒左右更新一次。 我想要一个FOSS解决方案。
我最好的选择是什么?你有什么经历?
我主要使用Java,但我需要数据存储区具有良好的性能,因此数据存储区解决方案不需要以Java为中心。
我还需要能够查询这些对象,我需要能够在程序启动时恢复所有对象。
答案 0 :(得分:3)
SQLite是一个开源的自包含数据库,支持内存数据库(只需连接到:memory:
)。它具有许多流行编程语言的绑定。它是一个传统的基于SQL的关系数据库,但您不运行单独的服务器 - 只需将其用作程序中的库。它很快。它是否足够快,我不知道,但它可能值得一个实验。
答案 1 :(得分:1)
你是每5秒更新一次20K对象还是每5秒更新一次20K?
什么样的物品?为什么传统的RDBMS不够用?
答案 2 :(得分:1)
答案 3 :(得分:1)
具体取决于您需要如何查询它,但是您是否查看过memcached?
http://www.danga.com/memcached/
如果你使用PHP,其他选项可能包括MySQL MEMORY Tables,APC Cache。
有关项目/要求的更多细节会有所帮助。
答案 4 :(得分:1)
内存存储?
1)一个简单的C'movoc'数组,其中所有结构都将被编入索引。
2)berkeleyDB:http://www.oracle.com/technology/products/berkeley-db/index.html。它很快,因为您构建自己的索引(辅助数据库)并且没有要评估的SQL表达式。
答案 5 :(得分:1)
查看此处列出的部分产品:http://en.wikipedia.org/wiki/In-memory_database
答案 6 :(得分:0)
您需要多大程度的耐久性?如果您将数据写回每个光盘,则大多数IO硬件在交易数量方面可能难以每5秒更新20,000次。
如果您能够承受丢失一些更新,如果数据库和操作系统支持这样做,您可以每隔100毫秒将其刷新到光盘,而没有相当便宜的硬件问题。
如果它真的是一个你不想经常刷新光盘的内存数据库,那听起来很微不足道。我听说H2非常好,但SQLite也可以。一个经过适当调整的MySQL实例也可以做到(但可能更复杂)
答案 7 :(得分:0)
Oracle TimesTen内存数据库。请参阅:http://www.informationweek.com/whitepaper/Business-Intelligence/Datamarts-Data-Warehouses/oracle-timesten-in-memory-databas-wp1228511232361
答案 8 :(得分:0)
Chronicle Map是一个纯Java 键值存储
Map
接口由于你没有很多“表”,所以一个成熟的SQL数据库可能是一个过度的解决方案,索引&可以使用少数不同的键值存储来实现查询,这些存储由vanilla Java代码手动更新。记录地图provides mechanisms可以使这些更新同时彼此隔离,如果您需要它。