Я получаю противоречивые результаты count () в Azure Cosmos DB с использованием Gremlin API. Я использую Data Explorer в портале Azure.
График имеет следующую структуру:
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
Затем я посчитал элементы, оцененные индивидуально для каждого пользователя, и проверил с помощью источника данных, который был импортирован в космос
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?
Обратите внимание, что я проверил ребра между вершинами, и все выглядит нормально.Нет дублированных отношений и т. Д. Данные, кажется, в порядке.Я также сравнил исходные данные и импортированные данные, все в порядке.