【问题标题】:How to store data in 1096 columns如何将数据存储在 1096 列中
【发布时间】:2018-06-13 14:32:10
【问题描述】:

主要 moto 是在我的 rails 应用程序中呈现条形图(使用 highcharts)。 我有一个 CSV (30MB) 数据文件(静态数据),有 1096 列和 14000 行。我想将它保存在数据库(MYSql)中。最初我想保存为数组。

您能否告诉我如何完成(通过牢记数据性能)。 你认为创建 1096 列会好吗?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 我认为创建 1096 列会好吗?嗯,没有。
  • @Strawberry 是的!那正是我所想。解决方案是什么?就像我有 3 年的数据一样。每列代表每一天。数据类型是浮点数。有什么线索吗?
  • 每天都有一个新行

标签: mysql ruby-on-rails bar-chart


【解决方案1】:

1096 列相当大。问题是,CSV 是否高度非规范化?你有代表相同数据的列吗?如果是这样,那么您可以为每组重复列创建一个表。这会减少列数,但会增加表数。

MySQL 允许每行的最大大小为 65,535 字节。这意味着每列的平均大小不能超过 59.79 字节。

将数据分成每行一个文本列可能可行,但您将无法对数据进行任何分析。但是,如果将其转换为 JSON,则可以将其存储在 MongoDB 或 PostgreSQL 数据库中。

没有一个正确答案可以解决您的问题。

【讨论】:

  • 我的数据代表 3 年的数据,这就是为什么我有 1096 列。数据类型是浮点数。
【解决方案2】:

不好:

id Mon  Tue   Wed
 1  12    27    8
 2  19    26    4
 3  12  NULL    7

好:

 id day value
  1 Mon    12
  1 Tue    27
  1 Wed     8
  2 Mon    19
  2 Tue    26
  2 Wed     4
  3 Mon    12
  3 Wed     7

这将导致 3 列和大约 1500 万行。

3 列和 1500 万行将比 1096 列和 14000 行更容易管理。

【讨论】:

  • 哇!这真的有一些想法。非常感谢!会努力的。
  • 嗯,这个主意不错。但 csv/excel 无法处理 1500 万行。 :(
  • 一个 csv 当然可以处理 1500 万行。 Excel 不能,但这只是意味着您需要更多的 csvs
【解决方案3】:

1096 列当然不是一个好主意,特别是如果数据的列是可变的,并且您想稍后处理具有不同列的文件。拥有大量固定列将被证明是一种非常不灵活的数据存储方式。

如果每一列是一天,每一行是某种度量,那么您可以尝试将数据存储在一个包含 3 列的表中:日期、度量、值。使用这样的表格,每个日期度量值三元组(csv 文件中的每个“单元格”)都会有一行。这使得表格可以非常灵活地添加新的日期和/或度量值。

但是,如果您想进行任何类型的分析(包括将数据显示为图表),您将面临将数据重新连接到与初始 CSV 相同的表格结构中的问题。对于非常大的数据集,这确实是一个性能瓶颈,因为它在 O(X * Y) 时间内解决,其中 X 是行数,Y 是列数。我在 MySQL 方面没有太多经验,但我在过去使用 PostgreSQL 的 CROSSTAB 功能进行这种重组时有很好的经验。

这只是一种方法,您必须进行大量试验才能获得最佳性能。您也可以查看 NoSQL 选项。正如已经说过的那样,真的没有一个正确的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2011-03-05
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多