azure-cosmosdb - cosmosdb sql api vs mongodb api 哪一个用于我的场景。
问题描述
我有一个名为“聊天”的文件
"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,每次修改它并每次都创建一个新文档时,我将不得不提取整个文档。
其他注意事项: 此阵列可以快速增长。这个“聊天”文档也可以嵌套到其他文档中。
我的问题 这是否意味着 mongodb API 更适合这种情况,而 sql api 会对这种情况产生性能影响?
解决方案
这是否意味着 mongodb API 更适合这种情况,而 sql api 会对这种情况产生性能影响?
很难说哪个数据库是最佳选择。
是的,正如文档中所见,Cosmos Mongo API 支持$push
并且$addToSet
效率更高。然而,事实上,Cosmos Mongo API 仅支持 MongoDB 功能的一个子集,并将请求转换为 Cosmos sql 等价物。所以,也许 Cosmos Mongo API 有一些不同的行为和结果。但是有责任在 Cosmos Mongo API 上改进他们对 MongoDB 的仿真。
对于 Cosmos Sql Api,目前不支持部分更新,但它正在上路。你可以在这里提交反馈。目前,您需要更新整个文档。当然,您可以使用存储过程来完成这项工作以释放客户端的压力。
接下来我想说的,也是最重要的,是@David 提到的限制。文档大小在 sql api 中限制为 2MB,在 mongo api 中限制为 4MB:cosmosdb 项的大小限制是多少?. 由于您的聊天数据在增长,您需要考虑将它们拆分。然后给文档一个分区键,例如"type": "chatdata"
对它们进行分类。
推荐阅读
- javascript - 有没有办法让响应式视差图像始终占据 100% 的视点?
- java - 如何将鼠标光标定位在屏幕中间并根据鼠标移动移动对象?
- npm - 使用 Laravel Mix 导入库/依赖项
- javascript - 用于检查输入字段的默认 OnChange 事件 JavaScript 函数是所有输入数字字段的数字或字母
- sql - 更新 SQL Server 2005 (v9.0.5000) 中的多行
- python - 如何根据各种过滤器过滤掉重复项
- java - DialogFragment 为空,即使提供了 xml
- python - ValueError,即使没有任何主动提及
- excel - 尝试对关闭的 Excel 文件进行排序时出现自动化错误 440
- c++ - 能够访问类定义之外的私有对象成员