我在这里遇到了一个问题:我正在 Build 一个离线frmaework的移动应用程序,他需要能够脱机工作 .
我想采用CouchDB / PouchDB解决方案 . 但要做到这一点,我需要知道如何将我的数据放入noSQl数据库(之前的MySQL用户......) . 所以,nosql对我来说是新的,但它似乎很有趣 .
所以我的应用程序有一个连接部分,所以用户数据库 . 每个用户都有附在他身上的文件 . 但是许多用户可以拥有许多文档(共享文档) . 我想复制一个用户的数据(所以他的信息是他的文件在移动应用程序上) .
我的想法是这样的:
每个数据库一个 . 所有Document的一个数据库,其中服务器过滤仅发送属于该用户的文档 .
在客户端,我必须打电话给:
var localDB = new PouchDB("myuser");
var remoteDB = new PouchDB("http://128.199.48.178:5984/myuser");
localDB.sync(remoteDB, {
live: true
});
就像客户端那样,我会有类似的东西:
{
username: "myuser",
birthday : "Date",
documents : [{
"_id": "2",
"szObject": "My Document",
},
{
"_id": "85",
"szObject": "My Document",
}]
}
你认为使用Couchdb和pouchdb可以做到这样吗?如果是的话,我是否正确地思考它?我读到每个文档有一个数据库不是问题,但我不知道复制是否会像我想象的那样工作
1 回答
Plain CouchDB没有任何每个文档访问选项,但这些可能是您的解决方案:
A.创建一个视图,然后使用过滤器同步Pouch-To-Couch . 但是,虽然这只会同步用户应该看到的文档,但是任何有足够知识的人都可以改变代码并查看其他人的文档,或者只是对数据库做任何事情(可能不是你想要的) .
B.创建包含所有文档的主数据库,然后为每个用户创建一个数据库,以及在master和per-user-dbs之间进行过滤复制 . 可能是处理这个问题的最简单,最合适的方法 .
C.不幸的是没有validate_doc_read(因为有一个validate_doc_update),但也许你可以创建一个简单的HTTP代理,它将解析传入的JSON,检查特定用户是否可以查看它,如果没有,则抛出403 Forbidden . 那么你还必须捕获查询include_docs = true的任何视图 .
(迟到的回复,我希望它仍然有用 - 或者如果没有,你找到了一个很好的解决方案)