azure-cosmosdb - Cosmos Gremlin 查询的奇怪执行行为
问题描述
我有一个下面的简单查询,它创建一个新顶点并在同一查询中在旧顶点和新顶点之间添加一条边。此查询在大多数情况下都运行良好。当系统负载过重并且 RU 耗尽时,就会出现奇怪的行为。
g.V('2f9d5fe8-6270-4928-8164-2580ad61e57a').AddE('likes').to(g.AddV('fruit').property('id','1').property('name','apple'))
在低/正常负载下,上述查询创建水果顶点并在和之间1
创建likes
边。预期的行为。user
fruit
在重负载下(可用的 RU 有限),上面的查询创建了fruit
顶点,但没有在andlikes
之间创建边。查询抛出状态码。如果我尝试重播查询,那么我会得到,因为顶点已经存在。此行为正在破坏数据。user
fruit
429
409
fruit
在很多地方我都有g.AddV
查询。因此,所有这些查询都可能在重负载下中断。
如果我使用__.addV
而不是有什么不同g.AddV
吗?
更新:使用__.addV
没有任何区别。
那么,我的查询错了吗?我需要在upsert
任何需要添加边缘的地方做吗?
解决方案
我不知道 Microsoft 是如何实现 TinkerPop 的,因此我不确定以下内容是否有帮助,但您可以尝试先创建新顶点,然后在现有顶点中添加一条边。
g.addV('fruit').
property('id','1').
property('name','apple').
addE('likes').
from(V('2f9d5fe8-6270-4928-8164-2580ad61e57a'))
如果这也失败了,那么是的,一个 upsert 可能是你最好的选择,因为你可以无限期地重试相同的查询。但是,由于我对 CosmosDB 没有深入的了解,我无法判断它的 upserts 是否可以防止边缘重复。
推荐阅读
- ruby-on-rails - 通过ajax成功提交表单时如何验证真实性令牌?
- r - 标签编码后如何在r中标记分类变量
- r - 使用 ggplot_build 更改 ggplot2 绘图并在 plot_grid 中使用它
- rx-java - 使用多播重复 RxJava 管道
- python - Keras Prediction 对测试集中的不同类别给出相同的结果
- amazon-web-services - 如何使用 python 从 Amazon Rekognition 的 s3 存储桶中读取图像?
- c++ - C++:从非模板基类派生的模板类的 unique_ptr 多态性
- kubernetes - Kubernetes 无法将卷挂载到文件夹
- python - 在条件中从一个表列值复制到第二个表
- r - r中缺少时间,如何按时间范围进行子集化?