我正在使用Azure Functions和Cosmos DBSQL使用javascript创建无服务器应用程序。
我拥有用户
项的以下数据库模式:
{
"id": "user_id_2",
"username": "username_2",
"pass": "pass_1",
"feed": [],
"followed": [
"username_1",
"username_3",
"username_4"
],
"followers": [
"username_3",
"username_4"
]
}
目前,当一个user_1跟随另一个user_2我会更新数据库文档user_1-没问题。但是现在我还需要为user_2更新文档,特别是字符串数组-追随者
。如何通过带有绑定的azure函数来做到这一点?我想出的唯一方法是查询整个文档的数据库,在客户端更新它,然后在数据库中PUT,覆盖之前的文档。然而,这似乎很荒谬...
Cosmos DB目前不支持部分更新,因此拉取文档、将项目添加到数组中然后执行PUT是唯一的选择。
话虽如此,你的数据设计的问题是,追随者
是无限的
数组,你的用户规模可以在不受控制的情况下增长。大小越大,需要的 RU 操作就越多。
请查看何时不在此嵌入https://docs.microsoft.com/azure/cosmos-db/modeling-data#when-不嵌入
当我在创建社交应用程序时,我为社交应用程序编写了一个设计文档:https://docs.microsoft.com/azure/cosmos-db/social-media-apps
理想情况下,A跟随B的关系将是它自己的文档。您可以将它们存储在Graph帐户中以获得最佳性能,因为您在这里真正构建的是一个图形,您将运行的查询是“谁跟随B?”或“谁关注我的追随者?”。