cosmosdb sql api 与 mongodb api 哪个适用于我的场景。

cosmosdb sql api vs mongodb api which one to use for my scenario.

我有一个名为 "chat"

的文档
 "Chat": [
        {
          "User": {},
          "Message": "i have a question",
          "Time": "06:55 PM"
        },
        {
          "User": {},
          "Message": "will you be able to ",
          "Time": "06:25 PM"
        },
        {
          "User": {},
          "Message": "ok i will do that",
          "Time": "07:01 PM"
        }

每次收到新的聊天消息时,我应该能够简单地附加到这个数组。

mongodb API 聚合管道(预览)允许我使用 $push $addToSet 之类的东西

如果我使用sql api,我将不得不每次修改整个文档并创建一个新文档。

其他注意事项: 这个数组可以增长 rapidly。 此 "chat" 文档也可能嵌套到其他文档中。

我的问题 这是否意味着 mongodb API 更适合这种情况,而 sql api 将对这种情况产生性能影响?

Does this means that mongodb API is better suited for this and sql api will have a performance hit for this scenario ?

很难说哪个数据库是最好的选择。

是的,正如在 doc 中发现的那样,Cosmos Mongo API 支持更高效的 $push$addToSet。然而,事实上,Cosmos Mongo API 仅支持 MongoDB 功能的一个子集,并将请求转换为 Cosmos sql 等价物。所以,也许 Cosmos Mongo API 有一些不同的行为和结果。但是 Cosmos Mongo API 有责任改进他们对 MongoDB 的模拟。

关于 Cosmos Sql Api,目前还不支持部分更新,但它正在上路。您可以提交反馈 here. Currently, you need to update the entire document. Surely, you could use stored procedure 来完成这项工作以释放您客户端的压力。

接下来我要说的,也是最重要的,就是@David提到的限制。 sql api 中的文档大小限制为 2MB,mongo api: 中的文档大小限制为 4MB。由于您的聊天数据在增长,您需要考虑拆分它们。然后给文档一个partition key比如"type": "chatdata"来分类。