В RavenDb я должен хранить иерархические данные, и мне нужно запросить его рекурсивно. Выступление здесь вызывает наибольшую озабоченность.Моделирование иерархических данных в RavenDb
То, что я похож на следующем:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public Category Parent { get; set; }
}
В этом случае, если хранить родительскую категорию внутри самого документа, это будет трудно для меня, чтобы управлять данными, как я дублируя категорий повсюду.
Таким образом, чтобы сделать это легко, я могу хранить это, как показано ниже:
public class Category
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Name { get; set; }
}
Но в этом случае я не знаю, как производительность будет здесь, как я буду иметь миллионы записей, и мне нужно для создания дерева категорий из этой ссылки.
Есть ли определенное решение в RavenDb о том, как моделировать данные такого типа, когда производительность является самой большой проблемой?
спасибо! Это действительно помогает. В этом случае я буду дублировать категорию в нескольких местах (может быть, 1000 раз, кто знает). Итак, в RavenDb есть ли способ обновить информацию о категории в нескольких местах? или я должен найти их по одному и обновить их отдельно? Я просмотрел пакетное обновление здесь (http://ravendb.net/docs/2.0/client-api/set-based-operations), но не уверен, что это тот, который мне нужен. – tugberk
Я не следую - зачем вам нужно обновлять множество вхождений категории сразу? в том, что я предложил, у вас есть только одно вхождение категории в качестве документа, а дерево иерархии просто использует идентификатор категории, чтобы определить, кто его родители, возможно, более одного. – synhershko
Единственное, что я вижу в этом как проблема, и, по общему признанию, это может быть только моя «новизна» к этому стилю, получает идентификатор определенной категории, как я могу получить всех своих детей? Это не позволяет вам запрашивать иерархию для получения идентификаторов этих детей, если вы не знаете путь до корня, и это также не позволяет вам получить этих родителей. Разве это не просто замена приоритета направления прохождения для другого - вниз против вверх? – MarqueIV