如何在1096列中存储数据

g9icjywg  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(167)

主要任务是在我的rails应用程序中呈现一个条形图(使用highcharts)。我有一个csv(30mb)数据文件(静态数据),有1096列和14000行。我想把它保存在数据库(mysql)中。最初我想保存为数组。
你能告诉我怎么做吗(记住数据性能)。你认为创建1096列会好吗?
任何帮助都将不胜感激。
谢谢

wgxvkvu9

wgxvkvu91#

坏的:

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

5f0d552i

5f0d552i2#

1096列当然不是一个好主意,尤其是如果数据的列是可变的,并且您希望稍后处理具有不同列的文件。拥有大量的固定列将是一种非常不灵活的数据存储方式。
如果每一列都是一天,每一行都是某种度量值,那么您可以尝试将数据存储在一个包含3列的表中:date、measure、value。有了这样一个表,每个日期度量值三元组(csv文件中的每个“单元格”)将有一行。这使得表格非常灵活,可以添加新的天数和/或度量。
但是,如果您想进行任何类型的分析(包括将数据显示为图表),您将面临将数据重新连接到与初始csv相同的表格结构的问题。对于非常大的数据集来说,这确实是一个性能瓶颈,因为它是在o(x*y)时间内解决的,其中x是行数,y是列数。我对mysql没有太多的经验,但是在过去我对postgresql的交叉表功能有很好的经验来完成这种重构。
这只是一种方法,您必须进行大量的实验才能获得最佳性能。您也可以查看nosql选项。正如已经说过的,确实没有一个正确的答案。

jv4diomz

jv4diomz3#

1096列相当大。问题是,csv高度非规范化了吗?有表示相同数据的列吗?如果是这样,则可以为每组重复列创建一个表。这将减少列计数,但增加表计数。
mysql允许每行的最大大小为65535字节。这意味着每列的平均大小不能大于59.79字节。
将数据拆分为每行一个文本列可能是可行的,但您将无法对数据进行任何分析。但是,如果将其转换为json,则可以将其存储在mongodb或postgresql数据库中。
你的问题没有一个正确的答案。

相关问题