在我们的案例中寻找适合的NoSQL数据库

时间:2014-02-03 04:31:02

标签: php mysql mongodb redis tracking

我们有一个在PHP + MySQL中运行的跟踪系统。 我们每天收到大约8到1千万个条目,这些条目代表了与clickid键链接的3个表格上每秒平均约100次插入。 同时我们可以在这些表上选择搜索clickid或在转换后更新一个等... 我们正在寻找一种更好的解决方案,能够使用后台并实时获取统计数据,因为现在显示结果大约需要150秒。 我们使用cronjobs来填写统计表并使用它,这样我们可以获得非常快速的结果,但是这个cronjob每小时运行两次,所以我们远离实时统计...

因此,我们正在考虑切换到NoSQL解决方案,但我们不确定哪个nosql db最适合我们的特定情况? 我们应该能够通过大约8个不同的键来装配和检索统计数据,例如campaignid,publisherid,advertiserid,date,......

我们正在考虑测试Mongodb和Redis,您认为哪一个最合适?为什么,在您看来?我们现在有大约500.000.000个条目我们应该作为文件插入,每隔几秒就会插入大约100个文件...所以它会快速增加安静,我们需要保留数据。 您认为用这么多数据显示结果的时间是什么?

另外,你认为拆分不同的收藏品或者更好地将所有内容保存在一个大型收藏中会更好吗?

2 个答案:

答案 0 :(得分:1)

我没有使用Redis的丰富经验,但我可以告诉你一些关于MongoDB的事情。

NOSQL运动更多的是关于可扩展性。因此,如果您想将它保存在一个集合中,那么选项将非常有限。大多数NOSQL数据库会将其分解为分片副本集。您可以阅读它here。如果您计划使用MongoDB,那么写入可能很快,因为它的分片和复制。如果您不介意数据有点陈旧(取决于分片中主要和次要之间的延迟),MongoDB可能是一个很好的选择。

通常,您可以写入主数据库并从辅助数据库中读取,而不是当前的情况,我猜测一切都发生在一个数据库上。这对于您的操作应该是显着的性能提升,但具体取决于细节。

答案 1 :(得分:0)

你实际上可以,both或者两者都不是:)我仍然不明白你的要求是什么,最重要的是你当前的数据量和预期的增长模式,以及你想要的东西除了实时统计之外。如果您计划完全替换MySQL,或者您是否打算在它旁边构建它,我也不太了解。

我绝对同意150s不是你的仪表板可接受的响应时间,但在潜入叉车操作之前,我建议你可能应该考虑一种更简单的方法,比如将实时统计计数器保存在合适的数据存储区中(例如Redis;))。