use*_*601 2 key-value mongodb nosql node.js
我是Key-Value Stores的新手,我需要你的建议.我们正在开发一个管理文档及其修订的系统.有点像维基.我们正在考虑将这些数据保存在一个关键值存储中.
请不要给我一个你喜欢的数据库的建议,因为我们想破解它,所以我们可以使用许多不同的键值数据库.我们正在使用node.js,因此我们可以轻松使用json.
我的问题是:数据库的结构应该是什么样的?我们有每个文档的元数据(timestamp,lasttext,id,latestrevision),我们有每个版本的数据(更改,作者,时间戳等...).那么,您推荐哪种键/值结构?
谢谢
来自MongoDB 小组的贿赂.它有些特定于MongoDB,但它非常通用.
这些历史实施中的大多数分解为两种常见策略.
理论上,您可以将文档的历史记录嵌入到文档本身中.这甚至可以原子地完成.
> db.docs.save( { _id : 1, text : "Original Text" } )
> var doc = db.docs.findOne()
> db.docs.update( {_id: doc._id}, { $set : { text : 'New Text' }, $push : { hist : doc.text } } )
> db.docs.find()
{ "_id" : 1, "hist" : [ "Original Text" ], "text" : "New Text" }
Run Code Online (Sandbox Code Playgroud)
> db.docs.save( { _id : 1, text : "Original Text" } )
> var doc = db.docs.findOne()
> db.docs_hist.insert ( { orig_id : doc._id, ts : Math.round((new Date()).getTime() / 1000), data : doc } )
> db.docs.update( {_id:doc._id}, { $set : { text : 'New Text' } } )
Run Code Online (Sandbox Code Playgroud)
在这里你会看到我做了两次写作.一个到主集合,一个到历史集合.要获得快速历史记录查找,只需获取原始ID:
> db.docs_hist.ensureIndex( { orig_id : 1, ts : 1 })
> db.docs_hist.find( { orig_id : 1 } ).sort( { ts : -1 } )
Run Code Online (Sandbox Code Playgroud)
history collection进行混合original collection什么是在关键值存储中保存带有修订的文档的最佳方法?
很难说有一种"最佳方式".显然这里有一些权衡取舍.
嵌入:
单独收集:
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |