Azure Cosmos DB Gremlin API - count () дает противоречивые результаты - PullRequest
0 голосов
/ 10 мая 2019

Я получаю противоречивые результаты 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?

Обратите внимание, что я проверил ребра между вершинами, и все выглядит нормально.Нет дублированных отношений и т. Д. Данные, кажется, в порядке.Я также сравнил исходные данные и импортированные данные, все в порядке.

...