У меня есть большое количество узлов, представляющих учетные записи, которые мы могли бы пометить как, скажем, (a :Account)
. Каждый (:Account)
может иметь потенциально десятки тысяч (t :Transaction)
узлов, связанных с ним, каждый из которых представляет данные для транзакции, которая произошла с этой учетной записью.
Узлы (:Transaction)
имеют свойство date
. Учитывая дату запроса о том, что было бы наиболее эффективным способом получить последний (:Transaction)
узел для каждого (a :Account)
, который происходит до или в дату запроса? Это может быть один из способов сделать это:
// run for all address nodes
match (a :Address)
with distinct a
optional match (a)-->(t :Transaction)
where t.timestamp <= date("2014-03-07")
with a, t
where t.date = max(t.date)
return a, t
Однако я не уверен, что этот метод очень эффективен, когда число (t)
, подключенных к каждому (a)
, становится очень большим. Есть ли способ написать запрос или проиндексировать базу данных так, чтобы время запроса линейно масштабировалось с количеством учетных записей, независимо от количества транзакций, подключенных к этим узлам учетных записей?
Для раскрытия информации я разместил версию этого вопроса на форуме сообщества neo4j , но я надеюсь, что увеличение трафика на этом сайте сделает этот вопрос более открытым.