我需要从服务器中查看我的视图中的大量数据(在JS中)。
json约为 30 000 000 char长度。这有点像这样(只是一个例子):
[{x:1000,y:1000,t:1505250440},{x:999,y:1000,t:1505250441},{x:998,y:1000,t:1505250442}......]
通过使用CRON从数据库中的表中提取数据,每小时更新一次JSON。
我应该存储整个JSON:
最有效的方法是什么?我不一定需要将它存储在JSON中,我可以使用基本压缩来更简单地存储它,如:
1000.1000.1505250440-999.999.1505250441-....
答案 0 :(得分:0)
如果您想存储查询结果并从脚本中获取整个数据集,从性能角度来看,将其保存在文件中似乎更有效。
而且,正如您所提到的,将其存储在JSON中是多余的。 CSV格式不会强制您像JSON键那样存储每一行的元数据,因此需要的空间更少。
此外,您可以压缩结果,但解压缩以访问数据可能效率较低。这取决于您需要执行数据访问的频率以及它应该有多快
答案 1 :(得分:0)
有趣的问题。这实际上取决于瓶颈在哪里,我们不知道你对这些(这些)数据做了什么。我假设您正在使用cron来收集这些数据,因为当客户端请求它时,在服务器上生成它需要很长时间。我会说A和B非常相似,它们在磁盘上占用的存储空间大致相同,而B的速度只是稍微快一点。
你是C的榜样不会给你买太多东西。如果你知道这些将是32位整数然后存储它们肯定会将它们存储为字符串。对于64位,它将取决于字符串的平均长度。无论哪种方式,gzip都可能是你的朋友。
如果你不需要这么长时间,你可能还想考虑缓存而不是存储。
答案 2 :(得分:0)
我相信第3个选项是最好的(如果你想要最小字节大小)并将它与第1个选项混合以将其存储在数据库行中。
就个人而言,如果数据将在以后用于数据库查询,则称为pipelining
(将大数据存储在临时位置,直到有可用资源的时间为止)。 / p>
要创建基本管道,请获取数据并将其存储在data.pipe.txt
之类的文本文件中,以原始文本将所有数据推送到其中,或将该JSON转换为CSV把它缩小。
如果您主要使用PHP来管理和操作数据,请使用更友好的PHP格式,支持JSON,但它主要用于JavaScript,而CSV很适合PHP管理,循环每一行,你得到我的意思。
但是既然你说数据来自CRON工作,你最好每24小时进行一次大操作(如果可行的话),并且每小时将数据临时存储在管道中。
这个问题有点宽泛,我想谈论管道。