有一个包含大约6百万条记录的数据集。每条记录具有相同数量的字段。共有8个领域:
ID Title Color Date1 Date2 Date3 Date4...
应该有一种方法可以按标题和所有日期字段(或RDBMS术语中的“列”)过滤这些记录。
数据的大小不是很大,大约几千兆字节。我们没有很长的文本字段等(我们在架构创建过程中摆脱了它们,所以现在我们在数据集中只有非常重要的字段)。
后端读取&写数据非常密集。我们真的希望尽可能加快读/写(以及按字段过滤)。目前我们正在使用Postgres,我们喜欢它的可靠性,但它似乎并不是很快。是的,我们做了一些调整和优化,添加了索引,将其安装在32GB RAM机器上并设置了所有必要的设置。换句话说,它有效,但我仍然相信它可能会更好。我们需要的是速度:按日期和标题过滤记录应该快速,非常快。数据插入可能会更慢。后端过滤所有未处理的记录,处理它们,并设置日期标志(处理时的日期时间)。每5-10秒执行大约50个后端“工作人员”,因此数据库应该能够非常快速地执行。我们还进行了一些数据库迭代(一种map \ reduce作业),因此数据库解决方案应该能够执行这类任务(RDBMS在这里并不是很好)。
我们没有加入,数据已针对大数据解决方案进行了优化。只有一个'大桌子'。
我们希望在单个节点或许多小实例上运行它。数据并不重要。但我们希望避免昂贵的解决方案,因此我们正在寻找一种SQL或NoSQL解决方案,它在相同的廉价硬件上的性能比Postgres快。
我记得大约一两年前我尝试过MongoDB。从我记忆中来看,过滤并不那么快。 Cassandra更好但我记得它只能执行一小部分过滤查询。 Riak很好但只适用于拥有许多机器的大型集群。这是我的基本经验,如果你们知道其中一个解决方案表现出色,请写下来。或建议另一种解决方案。
谢谢!
答案 0 :(得分:2)
我同意上面的Ryan。坚持使用PostgreSQL。
您还没有描述您的写入负载实际上是什么样的(您是否在这里和那里更新了一些记录,但是有很多并行查询?使用较少数量的并行查询进行更新但是一次更新了大量行等)。所以我无法告诉你需要做些什么来提高速度。
然而,根据你的问题以及你所说的你到目前为止所做的事情,我建议你考虑聘请顾问来看看你的数据库,用新的眼光看你的环境等,并提出改进建议。我的猜测是你有很多可以进行优化的东西,你会在这些优化上花费的钱少于转换到新环境。
答案 1 :(得分:1)
我同意丹尼斯的看法,你应该坚持使用Postgres。根据我的经验,正确调整时的关系数据库具有令人难以置信的快速结果。或者说另一种方式......我发现调整Mongo以便在10ms或更短时间内恢复复杂查询比调整SQL Server和MySQL更难。
请阅读本网站http://use-the-index-luke.com/,了解有关如何进一步调整的提示。这家伙还写了一本可能对你有用的书。
就像Denis所说的那样,数据规模并不大,以至于使用NoSQL解决方案从头开始是值得的。