2013-11-01 66 views
-1

有大约6百万条记录的数据集。每个记录具有相同数量的字段。有8个领域共:针对特定需求的最佳SQL NoSQL解决方案?

ID Title Color Date1 Date2 Date3 Date4... 

应该有由标题和所有日期字段(或在RDBMS而言,“列”)来过滤这些记录的方式。

数据的大小并不是很大,几千兆字节。我们没有很长的文本字段等(我们在架构创建过程中摆脱了它们,所以现在我们在数据集中只有非常重要的字段)。

后台读取&写入数据相当密集。我们真的希望尽可能加快读取\写入(并按字段进行过滤)。目前我们使用的是Postgres,我们喜欢它的可靠性,但看起来并不是很快。是的,我们做了一些调整和优化,增加了索引,将它安装在32GB内存的机器上,并设置了所有必要的设置。换句话说,它可行,但我仍然相信它可能会更好。我们需要的是速度:按日期和标题过滤记录应该快速,非常快。数据插入可能会比较慢。后端过滤所有未处理的记录,处理它,并设​​置日期标记(处理日期时间)。每5-10秒就会有大约50个后端“工人”执行,因此数据库应该能够执行得非常快。我们也做一些数据库迭代(一种map \ reduce作业),所以数据库解决方案应该能够执行这种类型的任务(这里RDBMS并不是很好)。

我们没有加入,数据已经针对大数据解决方案进行了优化。只有一个'大桌子'。

而且我们希望在单个节点上或许多小型实例上运行它。数据并不重要。但是我们希望避免使用昂贵的解决方案,所以我们正在寻找一种SQL或NoSQL解决方案,这种解决方案在相同便宜的硬件上执行速度会比Postgres快。

我记得大约一两年前我尝试过MongoDB。从我记忆中来看,过滤并不是那么快。卡桑德拉更好,但我记得它只能执行一小部分过滤查询。 Riak很好,但只适用于拥有很多机器的大集群。这是我非常基本的经验,如果你们知道这些解决方案中的一个表现出色,请写下。或建议另一种解决方案

谢谢!

+3

“数据量不是很大,几千兆字节。” - 这对Postgres来说很小。它可以(并且确实)处理数千次更大的数据库而没有任何性能问题。坚持你目前使用的是什么;只是学会更好地使用它。 –

回答

1

我同意丹尼斯,你应该坚持使用Postgres。根据我的经验,正确调谐的关系数据库具有令人难以置信的快速结果。换句话说,我发现调整Mongo以使得在10ms或更短的时间内返回复杂的查询比调整SQL Server和MySQL更困难。

阅读本网站http://use-the-index-luke.com/了解如何进一步调整的想法。那家伙还写了一本可能对你有用的书。

就像丹尼斯说的那样,数据量不是很大,以至于值得用NoSQL解决方案从头开始。

+0

作为一个说明,vanilla PostgreSQL处理数十TB的数据库,并且像Postgres-XC或联合存储等方法,您可能会获得多倍的大小。此外,我预计最终会解决大数据集中的主要瓶颈问题,所以我不会在这里考虑大小。 –

2

我同意上面的Ryan。坚持使用PostgreSQL。

你还没有描述你的写入负载实际上是什么样的(你是不是更新了几条记录,而是有很多并行查询?用更少数量的并行查询更新,但更新了很多行一次等)。所以我不能告诉你你需要做些什么来获得更多的速度。

但是,根据您的问题以及您所说的迄今为止所尝试的内容,我建议您考虑聘请顾问以新鲜眼光来看待您的数据库,查看您的环境等,并提出改进建议。我的猜测是,你有很多事情可以进行优化,你会在这种优化上花费很少,而不是转换到新的环境。