2016-05-18 3 views
0

Я только начал использовать Neo4j. В основном я просто подключаюсь к Neo4j, используя neo4jclient, сохраняя несколько миллионов объектов POCO. Кажется, все работает нормально. Почти.Создание указателей в Neo4j, на несуществующей схеме?

При вставке нескольких 100 000 узлов с одной и той же меткой, объединяющей уникальный атрибут, производительность значительно падает. Следовательно, я рассматриваю возможность создания индекса. Без индекса я испытываю таймауты в уровне HTTP, но с индексом все работает нормально. То есть, я вижу исключения, такие как «соединение закрыто» с Neo4j, потребляющим 100% доступного процессора.

Настоящий вопрос: - Как создать индекс перед бланком в пустой базе данных, прежде чем хранить что-нибудь? Должен ли я определять схему и как это сделать? Я знаю, что могу создавать индексы, используя, например, «СОЗДАТЬ ИНДЕКС ВКЛЮЧЕН: Человек (имя)». Будет ли это работать, если в базе данных нет каких-либо узлов Person? Я пробовал, но когда я проверяю :schema, индексов нет.

Я проверил online resources, но не смог найти ответа.


Update: Я успешно создал indicies (на пустой базе данных), используя следующий код. В основном у меня есть абстрактный базовый класс, определяющий свойство TypeName (используется как Label) и KeyPropertyName (для слияния).

private void CreateIndices() 
{ 
    var exporters = typeof(NodeBase) 
     .Assembly.GetTypes() 
     .Where(t => t.IsSubclassOf(typeof(NodeBase)) && !t.IsAbstract) 
     .Select(t => (NodeBase) Activator.CreateInstance(t)); 

    foreach (var exporter in exporters) 
    { 
     this.client.Cypher.Create(string.Format("CONSTRAINT ON (n:{0}) ASSERT n.{1} IS UNIQUE", exporter.TypeName, exporter.KeyPropertyName)).ExecuteWithoutResults(); 
    } 
} 

ответ

2

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

+0

Спасибо! Я попробую завтра и вернусь к вам. У меня есть код, который создает уникальные ограничения, используя отражение. Я буду изменять его для создания индексов. Уникальное ограничение может быть не реализовано с использованием индекса в Neo4j? – Micke

+1

, если у вас уже есть индекс, вам нужно сначала его отбросить для создания ограничения –

+0

Если я создаю уникальное ограничение, мне все же нужно создать индекс (по тому же атрибуту) по соображениям производительности? – Micke