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