Я только начал использовать 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();
}
}
Спасибо! Я попробую завтра и вернусь к вам. У меня есть код, который создает уникальные ограничения, используя отражение. Я буду изменять его для создания индексов. Уникальное ограничение может быть не реализовано с использованием индекса в Neo4j? – Micke
, если у вас уже есть индекс, вам нужно сначала его отбросить для создания ограничения –
Если я создаю уникальное ограничение, мне все же нужно создать индекс (по тому же атрибуту) по соображениям производительности? – Micke