Требуется ли метка для создания индекса? - PullRequest
0 голосов
/ 26 ноября 2018

При использовании Neo4j с Cypher я никогда не задумывался о свойствах, думая о том, что индексы могут существовать независимо от меток.

Без метки

MATCH (n {displayName:"Macroautophagy"} ) RETURN n;

С меткой

MATCH (n:Pathway {displayName:"Macroautophagy"}) RETURN n;

до тех пор, пока я не преобразовал некоторую Java, которая использовала смешанный Core API и Cypher, в чистый Core API.

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

Когда я пошел преобразовать запрос, основанный только на значении свойстваЯ искал Core API. Я только нашел findNode или findNodes, где для каждого из них требовался параметр label, а затем я начал думать о том, как Neo4j выполняет первый запрос без метки.

При чтении документации для индексов было отмечено,

Cypher позволяет создавать индексы для одного или нескольких свойств для всех узлов, имеющих данную метку:

Индекс, который создается на основе одного свойства для любой данной метки, называется индексом с одним свойством.
Индекс, который создается на нескольких свойствах для любой данной метки, называется составным индексом.

Хотя я совершенно уверен, что теперь я понимаю это, будучи новичком в использовании Neo4j с Java API, я не хочу что-то упустить.

Если использовать Neo4j Core API в Javaдля поиска узла со свойством и без заданной метки, тогда единственный способ найти узел (ы) - это полное сканирование всех узлов, ищущих свойство?

Если ответНет, тогда ответ должен включать пример, показывающий более быстрый способ использования Neo4j Core API в Java.Как я уже отмечал, он прекрасно работал как запрос Cypher, вызываемый в Java, поэтому примеры Cypher не будут приняты.

Если ответ положительный, тогда я должен попросить некоторую вспомогательную документацию Neo4j помимо того, что я отметил,Причина в том, что любой может сказать «да», и я не могу подтвердить это на примере кодирования.


Пища для размышлений.

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

1 Ответ

0 голосов
/ 27 ноября 2018

Если вы используете Neo4j Core API в Java для поиска узла со свойством и без заданной метки, то единственный способ найти узел (узлы) - выполнить полное сканирование всех узлов, ищущихсвойство?

Да и нет.

  • Стандартный neo4j «индекс схемы» всегда связан с меткой.Вы уже цитировали документацию neo4j по этому вопросу.

  • Однако ручные индексы (также называемые "устаревшими" или "явными" индексами) делаютне требуют ярлыков.Ручные индексы рекомендуются только для особых случаев использования - например, полнотекстовый поиск , и намного сложнее в работе, чем индексы схемы.Таким образом, если у вас есть подходящий вариант использования и вы готовы приложить значительно больше усилий, тогда у вас действительно могут быть индексы, которые не связаны с метками.

... очевидно, чем больше вы изучаете, тем больше он остается неизменным.

Существует значительное различие между индексами neo4j и реляционными индексами.

  • Реляционные БД используют индексы для ускорения соединений между строками таблицы.
  • neo4j вообще не использует свои индексы для выполнения "соединений" (обходов отношений).Вместо этого индексы используются только для быстрого поиска узла initial в запросе.Впоследствии, обход связей между узлами просто требует использования прямой адресации, что намного быстрее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...