如何保存CouchDB/Cloudant中的更改以便稍后对我的数据库或甚至特定文档执行时间点恢复?使用Cloudant进行数据库和文档的时间点恢复
回答
我们正在努力使之成为一个一流的功能,但直到我们滚出去,这是怎么了我们的一个客户这样做是:
你有收藏,这些收藏品中,资源。因此,您需要保存一个日志记录数据库,其中每个文档的ID为collection-resource
,因此对于名为“cars”的集合和名为“Ford”的资源,您需要在日志数据库中有一个名为cars-ford
的文档。该文件看起来是这样的:
{
versions: [...]
}
任何时间资源被触摸或修改,您的应用程序通过追加新版本的versions
场的最后更新日志文件。该版本可能是这样的:
{
timestamp: '...', # some integer timestamp, for sorting
doc: {...} # attributes of the document as of the save
}
我们将使用该视图返回所有单据,每次发生改变时,排序的所有版本的列表。
然后,这里是你如何使用做恢复和类似:
获取最新的资源
版本获取文档的全部,并抢在最后一个元素versions
字段。这是最新的版本。
见相对于时间戳
所有版本我们将创建一个视图按时间戳进行排序。视图看起来是这样的:
{
map: "function(doc) {
for(var i in doc.versions){
emit(doc.versions[i].timestamp, doc.versions[i].doc);
}
}"
}
说,我们的数据库名为loggy
,设计文档,其中我们的观点生活被命名为restore
,视图本身被命名为time
。然后,我们将做一个GET请求到以下网址:
{CLOUDANT_HOST}/loggy/_design/restore/_view/time?startkey='...'
...其中用于startkey
价值,是一些时间戳。这是未经修改的,将在指定的时间戳之后返回每个版本。添加limit=X
,您将在时间戳后获得X版本。添加descending=true
,您将在时间戳之前获取版本,而不是之后。
见第N个版本的资源
就像上面,但我们会调整我们的观点一点:
{
map: "function(doc){
for(var i in doc.versions){
emit(i, doc.versions[i].doc);
}
}"
}
现在我们认为结果是由指数而非时间戳键。因此,我们不是将时间戳传递给startkey
,而是将N传递给第N版本附近的版本。
获取的修订版的编号为集合或资源
我们将通过收集和资源使用另一种观点认为,以组:
{
map: "function(doc){
// split te ID into collection and resource
var parts = doc._id.split('-');
// emit them as keys so we can group by them
emit([doc.parts[0], doc.parts[1]], null);
}",
reduce: "_count"
}
使用查询参数group
和group_level
分组结果通过他们的钥匙。所以,如果我们想要的cars
集合中已经触及资源事件的数量,我们会使用这样的查询字符串:
?group=true&group_level=1&key="cars"
group
组的结果,其密钥是相同的,但group_level=1
说:“上唯一的组第一个关键“,在我们的案例中是集合。 key
指定仅返回关键字与给定值匹配的文档。
获取的所有资源给定集合
使用_all_docs视图,我们将使用这样的查询字符串:
?reduce=false&startkey="{collection}-"&endkey="{collection}0"
记住我们的函数的reduce
一部分? _count
值表示“返回由map
发出的记录数”。 reduce=false
的意思是“不要那样做”。相反,只有map
函数运行。
startkey
和endkey
对使用Cloudant对结果进行排序,以排除除匹配以给定集合开头的ID之外的所有内容。
更新文档
一旦你的版本中,你想恢复,获取资源的当前版本,请从loggy数据库中的以往版本,并把过去版本的资源使用当前版本的_rev
值。巴姆,恢复。冲洗并重复进行时间点恢复。
- 1. 使用PowerShell和SMO恢复数据库时的显示进度
- 2. Mongodb:使用损坏的文档恢复数据库
- 3. 使用mysqlbinlog进行Mysql数据恢复
- 4. 将数据库恢复到某个时间点SQL Server 2008 R2
- 5. 在不同时间对同一个数据库进行DB2恢复的名称
- 6. MySQL InnoDB数据库恢复使用.frm文件和ibdata文件
- 7. 如何恢复数据库运行时间
- 8. 时间表数据库和文档数据库之间的链接
- 9. MySQL时间点恢复
- 10. 如何使用微软的API恢复/恢复ESE数据库
- 11. 使用CodeCeption(PHP)恢复数据库中的“恢复”状态
- 12. 恢复数据库
- 13. 数据库恢复
- 14. 用文件流恢复数据库
- 15. 在Cloudant上复制共享数据库
- 16. 通过流数据从数据库停机时间恢复
- 17. SQL Server 2005对使用“NORECOVERY”恢复的数据库执行“恢复”
- 18. 在Cloudant上的生产和临时数据库之间移动数据
- 19. 使用数据文件恢复数据库
- 20. 数据库被“恢复”恢复
- 21. 使用laravel迁移恢复数据库
- 22. 灾难恢复 - 不使用MDF恢复SQL Server数据库
- 23. 你如何执行可恢复的上传到谷歌文档集合?即使用Java和g数据库
- 24. 如何使用Cloudant更新Cloudant中的文档Node.js
- 25. Android - 恢复数据库在数据库文件丢失时清除数据库
- 26. pgAdmin的数据库恢复
- 27. 恢复的HyperSQL数据库
- 28. 恢复我的数据库
- 29. Android:恢复恢复时间
- 30. MSSQL:无法用时间点恢复