有一个微博类型的应用程序。两个主要的基本数据库存储是:MySQL 或 MongoDB。
我计划对大量数据进行非规范化,即对帖子进行的投票存储在投票表中,并且在主帖子表中增加计数。该帖子还涉及其他操作(例如,点赞、投反对票)。
如果我使用 MySQL,一些数据比固定模式更适合 JSON,以便更快地查找。
例如
POST_ID | activity_data
213423424 | { 'likes': {'count':213,'recent_likers' :
['john','jack',..fixed list of recent N users]} , 'smiles' :
{'count':345,'recent_smilers' :
['mary','jack',..fixed list of recent N users]} }
该应用程序还有其他组件,其中建议使用 JSON。因此,要更新 JSON 字段,顺序为:
在 python 脚本中读取 JSON。
更新 JSON
将 JSON 存储回 MySQL。
这将是 MongoDB 中的单个操作,具有,$push
等原子操作。MongoDB 的文档结构也很适合我的数据。$inc
$pull
我在选择数据存储时的考虑。
关于 MySQL:
- 稳定而熟悉。
- 备份和恢复很容易。
- 使用某些字段作为无模式 JSON 可以避免未来的一些模式更改。
- 可能要提前使用memcached层。
- JSON blob 在某些表(如主帖子)中将是静态的,但会在其他一些表(如帖子投票和点赞)中进行大量更新。
关于 MongoDB:
- 更适合将架构较少的数据存储为文档。
- 缓存可能会被避免,直到稍后阶段。
- 有时应用程序可能会变得写密集型,MongoDB 可以在不安全写入不成问题的那些点上表现得更好。
- 不确定稳定性和可靠性。
- 不确定备份和恢复有多容易。
问题:
- 如果一半的数据是无模式的,我们是否应该选择 MongoDB,如果使用 MySQL,我们应该将其存储为 JSON 吗?
像主帖这样的一些数据很关键,所以它将使用安全写入保存,计数器等将使用不安全写入保存。这种基于数据重要性和写入密集度的策略是否正确?
与 MySQL 相比,监控、备份和恢复 MongoDB 有多容易?我们需要计划定期备份(比如每天),并在发生灾难时轻松恢复它们。我对 MongoDB 的最佳选择是什么,以使其成为应用程序的安全选择。
稳定性、备份、快照、恢复、更广泛的采用 Ieddatabase 持久性是指向我使用 MySQL 作为 RDBMS+NoSql 的原因,即使 NoSQL 文档存储可以更好地服务于我的目的。
考虑到我想到的数据库设计,请将您的观点集中在 MySQL 和 MongoDB 之间的选择上。我知道可能有更好的方法来使用 RDBMS 或 MongoDB 文档来规划数据库设计。但这不是我当前问题的重点。
更新:从 MySQL 5.7 开始,MySQL 支持丰富的原生 JSON 数据类型,提供数据灵活性以及丰富的 JSON 查询。