1

我有一个使用 MySQL 数据库的 Web 应用程序,该数据库有大约十几个列,以及数百万条用单字符代码编码的记录。WHERE可以通过添加子句来查询横截面:

SELECT col1, COUNT(col1) AS num FROM my_table WHERE col2='U' GROUP BY col1

每个页面进行大约十几个此类查询,每列一个查询减去WHERE子句中指示的查询。

我确实有一个缓存系统,但是数据每天都在更新(添加数十万条记录),并且最初生成缓存的过程很慢。我仍在尝试围绕 NoSQL 的想法进行思考,似乎它有很多不同的范例。因此,鉴于每条记录都遵循相同的格式,没有JOINs,这是否适合过渡到 NoSQL 数据库?如果是这样,您会推荐哪一种(或哪种)?

编辑:我应该补充一点,它需要与 PHP 兼容。

4

1 回答 1

0

这是个好问题。

以我的经验,处理数百万行总是很棘手

我认为实现这一目标的最佳方法是使用为处理此类查询而构建的特定数据库。

默认情况下,MySQL 是面向行的,旨在用作事务数据库 (OLTP),这意味着它可以快速插入、更新、删除少量行。但是,它并非旨在处理具有此类查询的大型数据集。因此,计算数百万行的值需要时间,或者有时不会给出结果(内存溢出......)

您的查询是典型的分析查询(包含对列的聚合和 GROUP BY)。您应该考虑使用面向列的数据库。这些数据库经过优化,旨在处理大型数据集。(面向列的数据库

我从来没有使用 NoSQL 数据库来处理大型数据集,因为我总是需要有一个明确定义的模式,并且面向列的数据库就足够了。如果您想使用其中之一,请确保它支持您想要执行的查询(即聚合类型 SUM、COUNT、...)。还要注意每天如何插入新行。

于 2012-10-24T19:35:23.820 回答