Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cloudant/Couchdb体系结构_Couchdb_Pouchdb_Cloudant - Fatal编程技术网

Cloudant/Couchdb体系结构

Cloudant/Couchdb体系结构,couchdb,pouchdb,cloudant,Couchdb,Pouchdb,Cloudant,我正在构建一个使用后端Cloudant数据库的通讯簿应用程序。数据库存储3种类型的文档: -> User Profile document -> Group document -> User-to-Group Link document 按照文档的名称,我的数据库中有用户,有用户组(如whatsapp),每个用户都有指向组的链接文档(链接文档还存储该组中该用户的设置/权限) 登录时,我的客户端应用程序通过查看该用户链接文档的排序规则,向cloudant查询用户文档和每个组文档

我正在构建一个使用后端Cloudant数据库的通讯簿应用程序。数据库存储3种类型的文档:

-> User Profile document
-> Group document
-> User-to-Group Link document
按照文档的名称,我的数据库中有用户,有用户组(如whatsapp),每个用户都有指向组的链接文档(链接文档还存储该组中该用户的设置/权限)

登录时,我的客户端应用程序通过查看该用户链接文档的排序规则,向cloudant查询用户文档和每个组文档

然后使用我上面识别的组,我找到该组的所有其他用户

现在的挑战是,我需要监视组和用户文档上的任何更改。我在应用程序端使用PockDB,可以根据所有组和用户文档的ID调用“更改”API。但规模可能是每组500个用户,一个登录用户是10-50个组的一部分。用户数量增加到1000将成为后端支持的噩梦


我的可伸缩性问题是否值得考虑?或者这对于cloudant来说是正常的吗?

如果我正确理解了您的模式,您可以使用以下形式的文档:

{
   _id: "user:glynn",
   type: "user",
   name: "Glynn Bird"
}
{  
   _id: "group:Developers",
   type: "group",
   name: "Software Developers"
} 
{    
   _id: "user:glynn:developers"
 }
在上面的示例中,主键的排序允许通过使用数据库的
\u all\u docs
端点的
startkey
endkey
参数检索用户及其所有成员身份


这是“可伸缩的”,因为if对于Cloudant从主索引或辅助索引检索数据是有效的,因为索引保存在b树中,所以具有相邻键的数据彼此相邻存储。
limit
参数可用于对较大的数据集进行分页。

如果我正确理解您的模式,您可以使用以下形式的文档:

{
   _id: "user:glynn",
   type: "user",
   name: "Glynn Bird"
}
{  
   _id: "group:Developers",
   type: "group",
   name: "Software Developers"
} 
{    
   _id: "user:glynn:developers"
 }
在上面的示例中,主键的排序允许通过使用数据库的
\u all\u docs
端点的
startkey
endkey
参数检索用户及其所有成员身份


这是“可伸缩的”,因为if对于Cloudant从主索引或辅助索引检索数据是有效的,因为索引保存在b树中,所以具有相邻键的数据彼此相邻存储。
limit
参数可用于对较大的数据集进行分页。

是的,文档或多或少都是您指定的。 链接文件如下:

{
  "_id": <AutoGeneratedID>,
  "type": "link",
  "user": user_id,
  "group": group_id
}
使用上述3个索引和include docs=true,第一个让我获取登录用户文档,第二个让我获取登录用户的所有组文档(使用开始键和结束键),第三个让我获取组的所有其他用户文档(再次使用开始键和结束键)

获取文档已经完成,但现在我需要监控每个组的用户的更改,为此,我不需要使用用户ID数组查询更改API吗?还有别的办法吗

Cloudant从主索引或辅助索引检索数据,因为 索引保存在b-树中,因此具有相邻键的数据存储在b-树的旁边 彼此

对不起,我不明白这句话


谢谢。

是的,这些文档或多或少都是您指定的。 链接文件如下:

{
  "_id": <AutoGeneratedID>,
  "type": "link",
  "user": user_id,
  "group": group_id
}
使用上述3个索引和include docs=true,第一个让我获取登录用户文档,第二个让我获取登录用户的所有组文档(使用开始键和结束键),第三个让我获取组的所有其他用户文档(再次使用开始键和结束键)

获取文档已经完成,但现在我需要监控每个组的用户的更改,为此,我不需要使用用户ID数组查询更改API吗?还有别的办法吗

Cloudant从主索引或辅助索引检索数据,因为 索引保存在b-树中,因此具有相邻键的数据存储在b-树的旁边 彼此

对不起,我不明白这句话

谢谢。

第一部分。 我建议在这里去掉“link”类型——这对SQL世界有好处,但对CouchDb没有好处

相反,最好利用文档存储的优点,即将用户组存储在“用户”的属性“组”中;属性“用户”表示“组”

使用此方法,您可以将筛选复制设置为仅处理特定组的更改,并且这些更改将已经包含该组的所有用户

我想注意,我做了一个假设,一个用户的组数和组数是合理的(最多几百个),并且不会经常改变

第2部分。 您可以将ID存储在这些属性中,然后使用视图“连接”其他数据。或者我也在考虑其他方法(对于我的用例,但您的方法类似):

1) 组仅包含用户ID-不需要视图

2) 您创建每个用户联系人的视图,即为每个用户获取与他有共同组的所有用户

3) 将此视图复制到客户端应用程序

当用户打开一个组时,值(例如联系人的姓名和图片)取自此本地“字典”)。 这种方法可以节省一些流量

请告诉我你的想法。因为现在我正在设计解决方案的体系结构。谢谢

第一部分。 我建议在这里去掉“link”类型——这对SQL世界有好处,但对CouchDb没有好处

相反,最好利用文档存储的优点,即将用户组存储在“用户”的属性“组”中;属性“用户”表示“组”

使用此方法,您可以将筛选复制设置为仅处理特定组的更改,并且这些更改将已经包含该组的所有用户

我想注意,我做了一个假设,一个用户的组数和组数是合理的(最多几百个),并且不会经常改变

第2部分。 您只需将ID存储在这些属性和