主要任务是在我的rails应用程序中呈现一个条形图(使用highcharts)。我有一个csv(30mb)数据文件(静态数据),有1096列和14000行。我想把它保存在数据库(mysql)中。最初我想保存为数组。你能告诉我怎么做吗(记住数据性能)。你认为创建1096列会好吗?任何帮助都将不胜感激。谢谢
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行更易于管理。
5f0d552i2#
1096列当然不是一个好主意,尤其是如果数据的列是可变的,并且您希望稍后处理具有不同列的文件。拥有大量的固定列将是一种非常不灵活的数据存储方式。如果每一列都是一天,每一行都是某种度量值,那么您可以尝试将数据存储在一个包含3列的表中:date、measure、value。有了这样一个表,每个日期度量值三元组(csv文件中的每个“单元格”)将有一行。这使得表格非常灵活,可以添加新的天数和/或度量。但是,如果您想进行任何类型的分析(包括将数据显示为图表),您将面临将数据重新连接到与初始csv相同的表格结构的问题。对于非常大的数据集来说,这确实是一个性能瓶颈,因为它是在o(x*y)时间内解决的,其中x是行数,y是列数。我对mysql没有太多的经验,但是在过去我对postgresql的交叉表功能有很好的经验来完成这种重构。这只是一种方法,您必须进行大量的实验才能获得最佳性能。您也可以查看nosql选项。正如已经说过的,确实没有一个正确的答案。
jv4diomz3#
1096列相当大。问题是,csv高度非规范化了吗?有表示相同数据的列吗?如果是这样,则可以为每组重复列创建一个表。这将减少列计数,但增加表计数。mysql允许每行的最大大小为65535字节。这意味着每列的平均大小不能大于59.79字节。将数据拆分为每行一个文本列可能是可行的,但您将无法对数据进行任何分析。但是,如果将其转换为json,则可以将其存储在mongodb或postgresql数据库中。你的问题没有一个正确的答案。
3条答案
按热度按时间wgxvkvu91#
坏的:
好的:
这将导致3列和大约1500万行。
3列和1500万行将比1096列和14000行更易于管理。
5f0d552i2#
1096列当然不是一个好主意,尤其是如果数据的列是可变的,并且您希望稍后处理具有不同列的文件。拥有大量的固定列将是一种非常不灵活的数据存储方式。
如果每一列都是一天,每一行都是某种度量值,那么您可以尝试将数据存储在一个包含3列的表中:date、measure、value。有了这样一个表,每个日期度量值三元组(csv文件中的每个“单元格”)将有一行。这使得表格非常灵活,可以添加新的天数和/或度量。
但是,如果您想进行任何类型的分析(包括将数据显示为图表),您将面临将数据重新连接到与初始csv相同的表格结构的问题。对于非常大的数据集来说,这确实是一个性能瓶颈,因为它是在o(x*y)时间内解决的,其中x是行数,y是列数。我对mysql没有太多的经验,但是在过去我对postgresql的交叉表功能有很好的经验来完成这种重构。
这只是一种方法,您必须进行大量的实验才能获得最佳性能。您也可以查看nosql选项。正如已经说过的,确实没有一个正确的答案。
jv4diomz3#
1096列相当大。问题是,csv高度非规范化了吗?有表示相同数据的列吗?如果是这样,则可以为每组重复列创建一个表。这将减少列计数,但增加表计数。
mysql允许每行的最大大小为65535字节。这意味着每列的平均大小不能大于59.79字节。
将数据拆分为每行一个文本列可能是可行的,但您将无法对数据进行任何分析。但是,如果将其转换为json,则可以将其存储在mongodb或postgresql数据库中。
你的问题没有一个正确的答案。