Neo4j использует индекс при его обновлении - PullRequest
0 голосов
/ 09 октября 2018

У меня есть созданный индекс, подобный этому:

CREATE INDEX ON :ResultSet(file_id)

С этим индексом я заполняю данные из нескольких файлов, скажем, file1, file2, file3.Каждый из этого файла будет создавать узлы ResultSet в neo4j.Параллельно я выполняю поисковый запрос

MATCH (n:ResultSet) where n.file_id='file1' RETURN COUNT(N)

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

1 Ответ

0 голосов
/ 09 октября 2018

Это безопасная операция во всех базах данных.Индексы - это просто дополнительные внутренние таблицы, которые также сортируются.При обновлении индекса БД установит на него блокировку записи.При использовании индекса он будет блокирован на чтение.Очевидно, что попытка сделать оба быстро приведет к худшей производительности, но это одна из цен, которую вы платите за молниеносные запросы на быстрое чтение.Если производительность записи превышает выигрыш при чтении, это означает, что эти данные, вероятно, не следует индексировать.


TLDR;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...