1

我有大量记录(10,000 条,每天都在增加),本质上是包含大量数据的报告。所有这些只是数字测量的数据都需要存储。

问题是,这些测量有 200 多个,我需要查询它们。例如,“对于 2012 年 1 月至 3 月之间创建的报告,按体重排序的每个性别的平均身高是多少?” 为了能够灵活地查询任何测量值,每个测量值都需要自己的列。

现在,我将每个字段存储在 JSON 数组中,并将其存储在单个列中。这对于我没有完成查询工具的这部分开发来说很好,但我需要尽快构建它......理论上我可以从数据库中提取所有记录并使用 PHP 对它们进行排序(当它们是对象时)或数组),但是在处理这么多行时,这似乎是不必要的复杂和危险。

MySQL中具有数万行的大型(200+)列表是否存在任何问题,无论是性能还是数据完整性?或者,是否有任何替代方法可以使用某些服务器端语言提取所有内容并对其进行排序?

关于我的数据的一些随机信息:

  • 每份报告都有 200 多个测量值
  • 每个测量值都需要能够被查询
  • 测量值主要是整数或浮点数,但也有一些字符串
4

2 回答 2

1

好的,我看到了你的困境,在数据库专家(可能是短暂的)缺席的情况下,我会给你我的意见。

为了理智起见,请分解您的数据。假设您正在存储有关人员的信息。您不需要 1 个表中的 200 列。您应该将它们拆分并在许多表中包含多个列。例如

tblGeneralCharacteristics:
 - colEyeColor
 - colHairColor
 - colHeight
 - colWeight

tblInterests:
 - colFaveColor
 - colFaveSport

tblRelationships
 - colMother
 - colFather
 - colBrother
 - colSister

这种方式要好很多。计算上我怀疑这很重要。显然,对于每个查询,您返回的数据较少,因此对于某些报告(您可能不需要获取所有数据或拖网所有数据)可能会更快(尽管如果您正确索引数据库,那么它应该不是问题)。

进入下一个问题。即数据库中的记录数量。如果 10,000 开始变得有点大,那么是时候开始缓存了。

现在,就我而言,缓存数据的方法没有对错之分。你需要的就是你需要的。因此,例如,在您的问题中,您提到获取 2012 年 1 月至 2012 年 3 月之间输入的记录的平均体重高度。嗯......您可以编写一个 cron 脚本,计算当月输入的所有记录的平均体重高度并存储在某处的另一张桌子上。然后,当您开始创建报告时,您只需要获取一月、二月和三月的值并将它们平均...这要容易得多。您不是对可能的数千行进行计算查询,而是对几百行进行 cron 查询(不管需要多长时间),然后实际报告只查询 3 行。

另一个技巧是,您可以在 SQL 中进行的计算越多越好。如果你想平均字段/记录,或者总计一些东西,那么将它与你的 SQL 查询一起发送。SQL 服务器将执行计算并返回结果,而不是返回大量数据进行筛选。我知道这并不总是容易/有用的,但是你可以让 SQL 做得越多越好。

希望这可以帮助。就像我说的那样,我确信数据库专家很想给你一些更有见地的建议。:)

于 2012-07-02T22:51:31.450 回答
1

将它们全部分开存放。Mysql 的每张表限制为 4096 列,每行限制为 65536 字节。您不会用主要是数字数据和一些字符串来解决这个问题。

您不应该在 php 中进行任何数据操作,这就是 sql 的亮点。200 列和 10,000 行在宏伟的计划中相当小,只需正确索引您的表,即使您不这样做,性能也应该很好。

于 2012-07-02T22:44:53.020 回答