УчитываяBest Practices при вставке ребра и вершины
Я вставить Hughe набор данных в Neo4j. В настоящее время я создал методы
а) Вставьте партию узлов
public Task AddNodesAsync<T>(List<T> nodes)
{
return client.Cypher.Create("(n:" + typeof(T).Name + " {nodes})").WithParams(new
{
nodes
}).ExecuteWithoutResultsAsync();
}
б) относящиеся 2 Kind узлов
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 раз, и после этого я называю второй метод для их связывания. Likethis:
AddNodesAsync(Projects);
AddNodesAsync(myCustomers);
LinkVertices<Projects,Customer>((project,customer) => project.customerId == customer.id,"projectsOfCustomer");
Это прекрасно работает, но я спрашиваю себя, если это хорошее решение. Я вижу, что процесс компоновки очень медленный.
Так что мой вопрос
Что такое рекомендуемый способ для инициализации Neo4j?
Показать Я использую C# Api? Остальные api? Или событие импортера csv? И второй вопрос: есть ли способ вставить обе партии со ссылками за один шаг? Я ожидал, что это будет быстрее.
Объединение обновлений в одну транзакцию приведет к значительному повышению производительности, а также к созданию индексов: Ярлык (свойство) также помогает, когда необходимо найти узел для создания отношения. –
Так что мне просто нужно начать транзакцию? Если я правильно помню, у меня было исключение, что нет разрешения на создание. Хм, может быть, я worng? Можете ли вы привести пример, чтобы я мог проверить, что я сделал по-другому? –
И еще больше нет синтаксиса t ocreate 2 узла со ссылкой в одном commant это? –