我们有一个具有以下参数的数据库:
- 30k记录,7mb大小
- 20次插入/秒
- 1000次更新/秒
- 1000范围选择/秒,按次级索引,每个约10行
- 至少需要一个辅助索引
- 如果密钥在75秒内未更新,则需要一些机制使其过期(可以通过编程垃圾收集器完成,但需要额外的“last_update”索引,并会增加一些负载)
- 不需要一致性
- 不需要耐久性
- 数据库应存储在内存中
目前我们使用Redis,但它没有二级索引,它的keys index:foo:*
太慢。Membase也没有二级索引(据我所知)。MongoDB和MySQL内存引擎具有表级锁。什么引擎适合我们的用例?
5条答案
按热度按时间5fjcxozz1#
尝试使用http://tarantool.org/它有二级索引,并且完全在内存中。它还使用快速异步IProto协议。
它被证明是稳定的,速度惊人。
bmvo0sr52#
我认为Redis确实支持二级索引,但它们不是隐式的:必须显式地维护它们。排序集可以用于范围扫描,但它不如MongoDB或关系数据库中的方便。
如果你正在寻找一个类似Redis的服务器,它能更好地支持范围扫描,我建议你看看已经停产的AlchemyDB项目,或者Aerospike 3(商业)产品(它包括Alchemy数据库的部分功能)。
h5qlskok3#
我想他是指7mb/唱片。另一个选择是在Cassandra之上使用PlayOrm的Scalable SQL…更多的机器可以产生更好的性能,因为磁盘将在范围扫描等方面并行工作。
fcg9iug34#
我认为,如果您能够达到指定的性能要求,那么DB是否在内存中就无关紧要了。
您的性能目标完全在单个、非复制和非碎片化MongoDB示例的能力范围内。Mongo使用内存Map文件,因此所有数据都将存储在内存中,但DB将持续刷新到磁盘。默认情况下,Mongo使用“不安全”模式,这消除了磁盘I/O的大部分负担。它值得考虑您的用例,而不是在应用程序代码中尝试DB应该为您做什么。
添加副本(Mongo对集群的术语)和/或分片将为您提供一个在需要时轻松提高性能的机会。多个索引(包括复合索引)、灵活的查询、批量插入和原子更新是有助于提高性能的好功能,可以减轻应用程序代码的负担。
yvgpqqbh5#
NoSQL数据库有四种类型。云计算检查哪一个符合您的要求。
**1.文档存储数据库。**文档存储数据库的原子单元是文档。每个文档都是JSON。不同的文档可以有不同的模式并包含不同的字段。文档存储数据库允许对文档中的某些字段进行索引,从而能够基于这些字段进行更快的查询。
**2.列存储数据库。**列存储数据库的原子单元是表中的一列,这意味着数据是按列存储的。它的列存储功能使基于列的查询非常高效,并且因为每列上的数据几乎具有相同的结构,所以它可以更好地压缩数据。
**3.键值存储数据库。**它很快。首先,这是因为使用了唯一键,其次,因为大多数键值存储数据库将数据存储在内存(RAM)中,可以快速访问。
**4.图形存储数据库。**图形存储数据库包含表示实体的节点和表示实体之间关系的边。