至于同步,你可以看看jIO——我们正在开发的一个开源库,它可以跨不同类型的存储同步 JSON 文档,并且有一个超级简单的 API。
有许多可用的连接器(webDav、S3、xwiki 等)可用并且正在开发中,您还可以编写自己的连接器来将 JIO 连接到您提供 JSON 数据的任何位置。
然后在客户端上,您可以使用客户端 localhost 和远程存储作为存储来设置复制修订存储:
var jio_instance = jIO.newJio({
"type": "replicaterevision",
"storage_list": [{
"type": "revision",
"sub_storage": {<storage spec for your localhost storage>}
}, {
"type": "revision",
"sub_storage": {<storage spec for your remote storage>}
}]
});
中的所有存储都storage_list
将自动进行版本控制和同步。因此,如果用户离线,检索文档,编辑并保存它(仅限本地存储,因为用户离线),jIO 将在用户下次尝试在线访问文件时引发冲突,因为当前版本在remote-storage
和localstorage
不同。
那么只需要编写一个例程来解决多个用户在在线/离线时编辑文档引起的任何冲突=保留/合并/等的版本。
访问文档相当简单。JSON 文档具有元数据和附件,您可以使用以下命令来修改您的 JSON 文档:
POST > generate a new document
PUT > update existing document
GET > retrieve a document
REMOVE > delete a document
ALLDOCS > retrieve all documents
PUTATTACHEMENT > add an attachment to a document
GETATTACHEMENT > retrieve an attachment from a document
REMOVEATTACHEMENT > delete an attachement from a document
像这样调用:
jio_instance.get({"_id":"your_doc_id"}, function (err, response) {
// do something
});
JIO 还有一个complex-queries
模块,它允许在你的存储上运行类似数据库的查询。所以你可以做这样的事情:
options = {
query: '(author:"% Doe") AND (format:"pdf")',
limit: [0, 100],
sort_on: [['last_modified', 'descending'], ['creation_date', 'descending']],
select_list: ['title'],
wildcard_character: '%'
};
// run query
jio_instance.allDocs(options, function (error, response) {
// do sth
});
如果您有任何问题,请告诉我。