Azure Cosmos DB Gremlin API-count()给出不一致的结果

时间:2019-05-10 15:37:18

标签: azure-cosmosdb gremlin azure-cosmosdb-gremlinapi

我使用Gremlin API在Azure Cosmos DB中获得不一致的count()结果 我在Azure Portal中使用Data Explorer。

图形具有以下结构:

user--(userGeneratedEvent)-->event--(eventRelatedTo)-->itemVersion--(itemVersionOf)--->item

我正在尝试查询所有用户项对+用户评级 我注意到然后有些元组被复制了,例如用户23和项目18。 这不是来自数据。当我将用户顶点限制为userId = 23时,我只能得到一个元组

g.V().hasLabel('user').as('user').out('userGeneratedEvent').has('eventType',7).as('rating').out('eventRelatedTo').out('itemVersionOf').as('item').select('user','item','rating').by('userId').by('itemId').by('value')

Cost: 438051.42000000004 RUs
Result:
[
  {
    "user": 23,
    "item": 14,
    "rating": 5
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 31,
    "rating": 4
  },


    g.V().hasLabel('user').limit(6).as('user').out('userGeneratedEvent').has('eventType',7).as('rating').out('eventRelatedTo').out('itemVersionOf').as('item').select('user','item','rating').by('userId').by('itemId').by('value')
Cost: 19569.979999999996 RUs
Result:
[
  {
    "user": 23,
    "item": 14,
    "rating": 5
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 31,
    "rating": 4
  },

我注意到,当我增加返回用户的限制时,结果是可以的,限制为1-6,但是在7级时,它开始返回重复项

    g.V().hasLabel('user').limit(7).as('user').out('userGeneratedEvent').has('eventType',7).as('rating').out('eventRelatedTo').out('itemVersionOf').as('item').select('user','item','rating').by('userId').by('itemId').by('value')

Cost: 25275.034999999993 RUs
Result:
[
  {
    "user": 23,
    "item": 14,
    "rating": 5
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 18,
    "rating": 4
  },
  {
    "user": 23,
    "item": 31,
    "rating": 4
  },

因此,我进行了一个简单的计数,对于7个用户(由userId指定),其结果为566

    g.V().hasLabel('user').has('userId', within(23,21,22,20,15,26,27)).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Cost: 5023.298999999999 RUs
Result:
[
  566
]

但是对于6个用户,结果是475

    g.V().hasLabel('user').has('userId', within(23,21,22,20,15,26)).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()

Cost: 4865.32 RUs
Result:
[
  475
]

仅第7个用户,计数返回34

    g.V().hasLabel('user').has('userId', 27).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Cost: 139.22 RUs
Result:
[
  34
]

总数不匹配!!!!

566-475!= 34

然后,我分别计算每个用户的评分项目,并与导入到cosmos的数据源进行核对

    g.V().hasLabel('user').has('userId', 23).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
49.25 RUs
Result:
[
  7
]

    g.V().hasLabel('user').has('userId', 21).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Result:
[
  143
]

    g.V().hasLabel('user').has('userId', 22).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Result:
[
  1
]

    g.V().hasLabel('user').has('userId', 20).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Result:
[
  5
]

    g.V().hasLabel('user').has('userId', 15).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Result:
[
  168
]

    g.V().hasLabel('user').has('userId', 26).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Result:
    [
      101
    ]


    g.V().hasLabel('user').has('userId', 27).out('userGeneratedEvent').has('eventType',7).out('eventRelatedTo').out('itemVersionOf').count()
Cost: 139.22 RUs
Result:
    [
      34
    ]

个人计数还可以,但总数是错误的。

6 + 143 + 1 + 5 + 168 + 101 = 424 != 475
6 + 143 + 1 + 5 + 168 + 101 + 34 = 458 != 566

我是否缺少某些东西?,Azure Cosmos DB中是否存在错误?

请注意,我已经检查了顶点之间的边缘,一切看起来都不错。没有重复的关系等。数据似乎正常。 我还比较了源数据和导入的数据,一切正常。

0 个答案:

没有答案