我正在开发一个Web应用程序,希望绘制一个包含每日数据点的1年图表。
X轴是时间(日期),Y轴是数值类型。
- MySQL版本:8.0(或更高版本)
- DDBB必须存储多个客户的数据点。
- 对于每个客户,我希望显示最后365个数据点(1年数据)。
- 每个数据点都是一个元组:(date,int)。例如:(2022年11月10日第35期)
- 该图表一次显示一个客户的数据。
- 每天都会计算一个新的数据点并将其添加到客户数据集中。
- 每个客户必须包含最多5年的数据点
- 客户数量为1000。
假设customer是Customers表的外键(FK),我考虑了 dataset 的两个选项。
选项A
| 主索引键|客户(FK)|日期|数值|
| - -|- -|- -|- -|
| 一个|客户1|日期1|值1|
| 2个|客户1|日期2|数值2|
| 一个人。|一个人。|一个人。|一个人。|
| 不|客户1|日期N|值N|
| 第N+1次|客户2|日期1|数值N +1|
| 一个人。|一个人。|一个人。|一个人。|
| 2N|客户2|日期N| Val 2N值|
选项B
对数据集使用JSON类型
| 主索引键|客户(FK)|数据集|
| - -|- -|- -|
| 一个|客户1|数据集1|
| 2个|客户2|数据集2|
其中每个数据集如下所示:
((2022年1月1日,第35期)、(2022年1月2日,第17期)、......、(2022年12月31日,第42期))
备注:
我的兴趣是尽可能快地绘制图表,由于数据插入/更新操作每天只发生一次(针对每个客户),因此我的问题是:
哪个选项更适合数据检索?
现在我有大约50个客户和2年的数据历史,但我不知道当我增加客户数量和年数时DDBB的表现如何。
此外,我在前端使用JavaScript绘图库,所以我想知道JSON数据类型方法是否更适合这个目的。
1条答案
按热度按时间csbfibhn1#
选择适合您的值的最小数据类型。例如,
SMALLINT UNSIGNED
只接受2个字节,允许最大为64 K的非负值。FLOAT为4个字节,范围很大,有效位数(大约7位)远远多于您可以合理绘制的数字。主查询.首先用各种方法做日常INSERT:
正在获取图形:
180万行(可能不到1GB)并不是很大。不过,我还是建议
PRIMARY KEY
按照这个顺序,不要包含AUTO_INCREMENT
。INSERT(s)将每天一次插入表中的1000个位置。SELECT(用于图形化)将发现所有聚集在一起的数据--非常快。如果您要保留过去一年的数据,我们可以进一步讨论。同时,要在5年后清除,这将是缓慢的,但每天只有一次: