Я разрабатываю программное обеспечение для управления документами и оцениваю базу данных noSql для хранения и поиска данных.
Резюме: программное обеспечение действует как файловая система, когда элементы организованы в каталог и подкаталог.
Каждый элемент дерева может иметь n свойств, используемых для фильтрации и сортировки.
Элементы также могут быть в конечном итоге связаны друг с другом какими-либо другими отношениями (кроме родитель-потомок).
Количество элементов может быть относительно большим (несколько миллионов), а ключевыми функциями приложения должна быть постоянная производительность при извлечении данных (с фильтрами и сортировкой по свойствам) независимо от роста базы данных.
Мне нужно 3 ключевые функции:
Получить прямые дочерние элементы папки. результат должен быть доступен для просмотра, сортировки и фильтрации для каждого свойства документа.
Получить все дочерние элементы папки (все элементы поддерева). результат должен быть доступен для просмотра, сортировки и фильтрации для каждого свойства документа.
Получить всех родителей папки
Я новичок в noSql и на самом деле использую rdbms (сервер Sql), но столкнулся с проблемой производительности и всеми ограничениями, вызванными фиксированной схемой для свойств документа. Я оцениваю OrangoDb или OrientDb, потому что я думаю, что их функции (ориентированные на документы и графики) могут быть лучшим решением для моих потребностей в дизайне.
Можете ли вы помочь мне, предложив мне дизайн базы данных и запрос для этой 3 задачи?
номер мне нужно, чтобы результат запроса возвращал набор данных со столбцом для каждого свойства:
Es. doc1: p1: v1, p2: v2
doc2: p1: v1, p3: v3
result:
name | p1 | p2 | p3
doc1 v1 v2 null
doc2 v1 null v3
Я думаю создать элемент как:
{
"_id": "_myItemId",
"name`enter code here`" : "Item1",
"itemType": "root / folder / file"
"parentItemId": "",
"properties" : [
{ name: "Property1", formatType: 0, formatMask: "", value: "Value1" },
{ name: "Property2", formatType: 0, formatMask: "", value: "Value2" },
{ name: "Property3", formatType: 0, formatMask: "", value: "Value3" }
]
}
есть ли у вас какие-либо предложения по дизайну, способному решить 3 ключевые функции, описанные выше?
Спасибо