如何在1096​​列中存储数据

时间:2018-06-13 14:32:11

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

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

请告诉我如何完成(通过记住数据性能)。 你认为创建1096列会不错?

任何帮助将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:0)

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

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

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

你的问题没有一个正确答案。

答案 1 :(得分:0)

为:

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行更容易管理。

答案 2 :(得分:0)

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

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

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

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