【问题标题】:storing json data that will be access/altered often in db or in file?存储将在数据库或文件中经常访问/更改的 json 数据?
【发布时间】:2016-09-20 20:04:37
【问题描述】:
- json 每天最多更新 4 次
- json 会经常被加载(每个用户都会以此为基础
数据)
- 每次保存的更改都需要保留上一个以前的版本
(一份备份)
鉴于这些情况,将 json 数据存储在服务器上的文件中与将其存储在数据库中是否有明确的优缺点?如果将它存储在数据库中,它是否有自己的表(两行,一个当前版本,一个备份副本)是否有意义
【问题讨论】:
标签:
json
database
file
architecture
data-storage
【解决方案1】:
如今,存储、获取甚至查询 JSON 已经不是什么大问题了——尤其是使用 MongoDB 和 Cassandra 等 NoSQL 解决方案。事实上,像 MongoDB 这样的平台将允许您直接查询 JSON 本身——事实上,它将数据存储为 JSON 文档并且执行得非常好。 (我假设你说的不是大规模,至少现在还没有。)
关键是像 MongoDB 这样的系统已经为您完成了很多艰苦的工作。它将有效地为您优化一些事情,例如将频繁的文档加载到内存中,优化它们的大小并提供遍历大型 JSON 文档而不占用大量空间的机制。
如果您要在逐个文件级别处理此问题,您将需要处理许多无法预料的问题。您需要管理文件句柄,注意并发读取时的读/写锁定,文件系统权限,处理磁盘 I/O 性能瓶颈 - 清单还在继续。即使对于如今日夜提供文件的网络服务器,他们已经做了一些非常有趣的优化来管理处理文件的性能,最终使用 CDN(内容交付网络)来优化边缘性能和管理规模。
保留 JSON 数据的先前版本可以很简单,只需不覆盖现有条目并将先前的先前 (n-2) 版本标记为删除即可。这可以在一个单独的线程中完成以“清理”或在一夜之间进行批处理以删除无关数据。 (注意:这可能会导致一些碎片化,但可以稍后压缩。)
所以,长话短说。我不会再将 JSON 存储在文件系统上。把它放在像 MongoDB 这样的东西中,让它处理细节。在您真正进行 1B+ 交易之前,这可能对您来说应该做得很好。