我目前正在设计一个系统,用于查看 YouTube 视频的排名/观看次数。每天有大量 YouTube 视频(> 500.000 个并且还在不断增加)。
我目前正在考虑将其存储在 MySQL 数据库中,但令我不安的是,该表将增长到数十亿和数万亿行,我认为这不会很好地执行。
我需要分析这些数据,例如:
- 哪些视频在 X 和 Y 之间增长了很多
- 绘制每天的点击次数
- 绘制每周的点击次数...
- 还有一些我还不知道的事情
那么,我的 Web 2.0 想法是,NoSQL 数据库是否可以更好地处理这个问题?我没有完全了解这些(几乎)新的数据库,也不知道它们有什么能力。
您的建议是什么?使用什么类型的数据库? 有关系还是没有关系?如果不是,哪个 NoSQL 数据库?
PS:第一要务是快速评估和插入结果,第二是高可用性(或只是复制)
最佳答案
给数据库系统提供建议是非常困难的,因为它总是取决于情况。然而,考虑到 Facebook 是基于 MySQL 构建的,这表明 MySQL 对您来说可能没有性能限制。
什么是有帮助的,你可能已经做了,就是创建一个你的表结构应该是什么样子的结构。然后还要考虑您想要针对表运行的查询。
如果你有正确的索引(这是查询速度依赖的主要且关键的因素),你将不必担心MySQL的性能。你应该考虑的是(我必须经历的),MySQL 处理索引的方式有很多有趣的事情。让我举几个我当时必须弄清楚的例子:
- 如果您想使用索引进行范围扫描,则该索引不能再用于
ORDER BY
- 范围列必须是串联索引中的最后一个,才能使用完整索引,同样适用于
ORDER BY
有关更多信息,请访问 mysqlperformanceblog.com 上的有用链接:http://www.mysqlperformanceblog.com/2009/09/12/3-ways-mysql-uses-indexes/
一般来说,如果数据库的结构经过深思熟虑并且索引良好,根据我的经验,如果您只有 10.000 行或 100 亿行,实际上并不重要,查询时间将大致相同。
关于mysql - 历史数据的存储和分析 - 什么样的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268214/