我使用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中是否存在错误?
请注意,我已经检查了顶点之间的边缘,一切看起来都不错。没有重复的关系等。数据似乎正常。 我还比较了源数据和导入的数据,一切正常。