Лучшие практики при вставке ребер и вершин
Дано
Я должен вставить огромный набор данных в neo4j. В настоящее время я создал методы для
а) Вставить партию узлов
public Task AddNodesAsync<T>(List<T> nodes)
{
return client.Cypher.Create("(n:" + typeof(T).Name + " {nodes})").WithParams(new
{
nodes
}).ExecuteWithoutResultsAsync();
}
б) Родственные 2 Вид узлов
public async Task LinkVertices<TSource, TTarget>(Expression<Func<TSource, TTarget, bool>> join, string relationName)
{
string sourceName = typeof(TSource).Name;
string targetName = typeof(TTarget).Name;
await client.Cypher
.Match(string.Format("({0}:{0})", sourceName), string.Format("({0}:{0})", targetName))
.Where(join)
.Create(string.Format("{0}-[:{2}]->{1}", sourceName, targetName, relationName))
.ExecuteWithoutResultsAsync();
}
Теперь я звоню AddNodesAsync<T>
2 раза и после этого я вызываю второй метод, чтобы связать их. Как это:
AddNodesAsync(Projects);
AddNodesAsync(myCustomers);
LinkVertices<Projects,Customer>((project,customer) => project.customerId == customer.id,"projectsOfCustomer");
Это работает хорошо, но я спрашиваю себя, является ли это хорошим решением. Я вижу, что процесс связывания особенно медленный.
Итак, мой вопрос
Каков рекомендуемый способ инициализации neo4j?
Показать, я использую C# Api? Успокоительный API? Или событие импортером CSV? И второй вопрос: есть ли способ вставить обе партии со ссылками за один шаг? Я бы ожидал, что это может быть быстрее.
1 ответ
Вам следует изучить возможность использования инструмента импорта, если вы хотите быстро импортировать огромное количество данных в совершенно новую базу данных neo4j.