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