Реляционная БД может надежно обеспечивать выполнение функции "категория - это объект первого класса". Вам потребуется ссылочная целостность : продукт может не принадлежать к категории, которой не существует. В удаленной категории не должно быть дочерних категорий. Нормализованная RDB может обеспечить ссылочную целостность через схему. БД NoSQL должна работать с клиентским кодом (вы должны писать) для обеспечения ссылочной целостности.
Посмотрим, как выполняются «категория продукта должна существовать» и «родители подкатегории должны существовать»:
RDB : Таблица, которая присваивает категории продуктам (отношение m: n), должна быть привязана к продукту и категории с помощью ON DELETE CASCADE
. Если категория удалена, продукт просто не может иметь такую категорию. Категория, которая связана с другой категорией в качестве дочерней: поле relayvent имеет ON DELETE CASCADE
. Это означает, что если родитель удален, его дети не могут существовать. Весь этот метод является декларативным («он объявлен таким образом»), все сложности существуют в данных, нам не нужен вонючий код, чтобы сделать это за нас. Вы можете смоделировать DB так же естественно, как и , понимая их последствия для реального мира.
Тип хранилища документов NoSQL : вам нужно написать код, чтобы сделать все. «Категория удалена» - это вариант использования , и вам нужно найти продукты, которые имеют эту категорию, и обновить каждый из них. Вы должны написать код для каждого варианта использования. То же самое касается управления подкатегориями. Модель данных может быть невероятно глупой, но их реальное значение должно быть смоделировано в коде . И его сложнее рассуждать в коде и потоке управления, чем в структурах данных .
У вас действительно есть потребности в производительности, требующие баз данных NoSQL?
Так что используйте РСУБД для управления вашими данными. Затем используйте обработчик прямого импорта или код на стороне клиента, чтобы вставить / обновить денормализованные объекты для поиска. Если большинство запросов на ваш сайт может быть выражено в запросах Solr, то отлично!
Что касается выражения иерархической огранки в Solr, см. ' Способы выполнения иерархической огранки в Solr? '.