На самом деле это скорее вопрос Lucene, но в контексте база данных neo4j.
У меня есть база данных, которая разделена примерно на 50 типов узлов (, так что «коллекции» или «таблицы» в других типах БД). У каждого есть подмножество свойств, которые необходимо проиндексировать, некоторые из них имеют одно и то же имя, некоторые — нет.
При поиске я всегда хочу найти узлы определенного типа, а не все узлы.
Я вижу три способа организации этого:
Один индекс для каждого типа, свойства естественным образом сопоставляются с полями индекса:index 'foo', 'id'='1234'
.
Единый глобальный индекс, каждое поле сопоставляется с именем свойства, чтобы различать тип, либо включать его как часть значения ('id'='foo:1234'
), либо проверять узлы после их возврата (Я ожидаю, что дубликаты будут очень редкими ).
Отдельный индекс типа является частью имени поля:'foo.id'='1234'
.
После создания база данных доступна-только для чтения.
Есть ли преимущества у одного из них с точки зрения удобства, размера/эффективности кэш-памяти или производительности?
Насколько я понимаю, для первого варианта neo4j будет создавать отдельный физический индекс для каждого типа, что кажется неоптимальным. Что касается третьего, я получаю, что большинство документов Lucene имеют только небольшое подмножество полей, не уверен, влияет ли это на что-либо.