我有一个使用MySQL数据库的Web应用程序,该数据库大约有12列,并且数百万条记录使用一个字符的代码编码。可以通过添加WHERE
子句来查询横截面:SELECT col1, COUNT(col1) AS numFROM my_tableWHERE col2='U'GROUP BY col1
每个页面进行大约十二种此类查询,每列减去一个WHERE
子句中指示的查询。
我确实有一个缓存系统,但是数据每天都会更新(添加数十万条记录),并且最初生成缓存的过程非常缓慢。我仍在努力围绕NoSQL的想法,似乎有很多不同的范例。因此,假设每个记录遵循相同的格式,且没有JOIN
,那么是否适合过渡到NoSQL数据库?如果是这样,您会推荐哪一种(或哪种)?
编辑:我应该补充一点,它需要与PHP兼容。
最佳答案
这是一个好问题。
以我的经验,处理数百万行总是很棘手的
我认为实现此目标的最佳方法是使用专门为处理此类查询而构建的特定数据库。
MySQL默认情况下是面向行的,旨在用作事务数据库(OLTP),这意味着它可以快速插入,更新和删除少量行。但是,它并非设计用于处理具有此类查询的大型数据集。因此,对数百万行的值进行计数将需要时间,或者有时不会给出结果(内存溢出...)
您的查询是典型的分析查询(包含列和GROUP BY的聚合)。您应该考虑使用面向列的数据库。这些数据库经过优化和设计,可以处理大型数据集。 (Column oriented database)
我从未使用NoSQL数据库来处理大型数据集,因为我始终需要明确定义架构,并且面向列的数据库就足够了。如果要使用其中之一,请确保它支持您要执行的查询(即聚合类型SUM,COUNT,...)。另请注意每天如何插入新行。
关于mysql - 在数百万行上计算不同的值–是否适合NoSQL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13055083/