我需要将本地项目移动到网络服务器,现在是时候开始在本地保存内容(用户进度和历史记录)。 主要思想是,Web 应用程序每 50 毫秒左右就会计算 8 个与正在使用该 Web 应用程序的用户相关的值。 我的问题是:
我应该使用 MySQL 来存储数据吗?目前我使用具有预定义格式的纯文本文件,例如:
Option1,Option2,Option3 Iteration 1 value1,value2,value3,value4,value5 Iteration 2 value1,value2,value3,value4,value5 Iteration 3 value1,value2,value3,value4,value5 ...
如果是这样,我应该使用 5 个(或将来更多)列(每个值一个)及其 ID 作为迭代吗?请记住,每次 session 我将进行 5000 多次迭代(大约 4 分钟)
每个用户每天可以进行 10-20 个 session 。
数据库会变得太大而降低效率吗?
由于样本速度,每 50 毫秒调用一次数据库对我来说似乎是一个问题(特别是因为我必须大量动画网页)。我想知道是否最好实现一个“保存”按钮,一次性将所有 5000 多个值填充到所有数据库中。如果是这样,最好的方法是什么?
将 *.txt 直接保存在网络服务器的文件夹中会更好吗?类似于 DB/usernameXYZ/dateZXY/filename_XZA.txt 。对我来说是的,省力多了。如果是这样,哪个函数允许我这样做(可能是 JS/HTML)。
最佳答案
规则很简单,并在此处的许多问答中进行了讨论。
除了极少数异常(exception)......
- 不要有多个具有相同架构的表。 (例如,每个用户一张 table )
- 不要跨列展开数组。使用另一个表。
- 不要将数组作为逗号放入单个列中。异常(exception):如果您从不使用 SQL 查看列表中的各个项目,那么它可以是不透明的文本字段。
- 警惕 EAV 架构。
- 批量
INSERT
或使用LOAD DATA
。 (比每次插入一行加速 10 倍) - 如果索引正确,十亿行表的性能就很好。 (问题:可能无法提供足够的索引。)
- 图像(如您的 .txt 文件)可以存储在文件系统中或数据库的
TEXT
列中 - 没有通用的答案。 (也就是说,需要更多详细信息来回答您的问题。)
“计算与用户相关的8个值”——模糊。一些可能性:
- 动态计算“排名”既昂贵又耗时。
- 摘要数据最好预先计算
- 最好的近似值是巨大的数字(例如搜索点击率)
- 根据出生日期计算年龄 - 很简单
- 当然,获取该用户表中的数据是微不足道的
- 计算“ friend ”的数量 - 这取决于情况
- 等等
关于javascript - MySQL对1列N°值或1列值的DB设计的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40233693/