Лучшее решение для фильтрации - PullRequest
0 голосов
/ 14 февраля 2019

Я новичок в graphDB и учусь создавать хорошую модель данных.

Мне нужно управлять 10 миллионами «контактов», и я хотел бы отфильтровать их по «полу».Я создаю POC, и все в порядке, но я не понимаю / не могу найти лучшее решение - сохранить пол как вершину:

gender as vertex

иликак поле на вершине контактов:

gender as field

Я знаю, что каждое ребро будет влиять на размер данных, но я не нахожу никаких ссылок наразница в производительности для этих двух типов управления данными.

Знаете ли вы правильный подход?

1 Ответ

0 голосов
/ 16 февраля 2019

В этом случае я бы поставил пол в качестве свойства в вершине и добавил индекс для этого свойства, чтобы получить ваш ответ.Хотя гендер в качестве отдельной вершины более корректен с теоретической точки зрения, у него есть несколько практических проблем, которые заставляют меня предложить второй подход.

  1. Первая предложенная вами модель введет суперузел в ваш граф,Суперузел - это узел с непропорционально большим количеством падающих ребер.Вершина Пол будет иметь низкую селективность (Мужской / Женский / Неизвестный), поэтому у каждой вершины будет коэффициент разветвления , который исчисляется миллионами.Этот уровень фактора ветвления, вероятно, вызовет всевозможные проблемы с производительностью, что приведет к медленному запросу.Денормализация пола в вершине и добавление индекса должны решить большинство из этих проблем.Единственная проблема, которая, вероятно, останется, это количество времени, которое потребуется, чтобы вернуть 3-5 миллионов записей, которые вы, вероятно, получите.
  2. При первом подходе отвечаем на вопрос «Каков пол человека?»потребовался бы переход от вершины контакта к краю к вершине пол , который был бы медленнее, чем просто оттягивание вершины контакта .Если предположить, что это частый запрос, на который вы хотели бы ответить, то это соображение, которое вы должны принять во внимание.
...