Я уже некоторое время использую NoSQL DB, и это мой вклад в тему:
Большой случай использования для базы данных NoSQL представляет собой приложение для статистики и / или генерации отчетов , EXPECIALLY , когда данные поступают из источника третьей стороны.
В такой ситуации база данных NoSQL может быть отличным выбором
Давайте рассмотрим, например, MongoDB :
Если у вас есть данные в JSON (они могут быть получены из стороннего API или экспортированы из sql-приложения) в MongoDB , довольно просто импортировать и обновлять данные JSON в базе данных; например, используя mongoimport
утилиту командной строки
На данный момент очень просто создавать динамические запросы с фильтрацией и группировкой, которые хорошо подходят для такого рода приложений.
Например, используя Aggregation Framework :
$pipeline = [];
//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ] ] ];
//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
$pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];
//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];
return $collection->aggretate( $pipeline );
Я хотел бы отметить простоту, с которой мы можем динамически добавлять / удалять фильтры, используя структуры данных php и избегая утомительной конкатенации строк для построения наших запросов. При таком подходе добавление / удаление фильтров динамически так же просто, как добавление / удаление элементов из массива
Еще одно большое преимущество заключается в том, что подобное решение, вероятно, будет быстрее, чем использование реляционной базы данных , где мы должны объединяться с различными таблицами, чтобы получить все необходимые нам данные.
Кроме того, этот вариант использования является оптимальным, поскольку позволяет избежать всех основных ограничений базы данных NoSQL:
Отсутствие транзакций: приложение не выполняет запись, а только чтение, поэтому нам вообще не нужны транзакции
Отсутствие объединений между таблицами. Нам не нужны объединения, поскольку мы можем использовать избыточность для хранения наших денормализованных данных в коллекциях. Поскольку мы только читаем данные, нам не нужно беспокоиться о синхронизации денормализованных данных между обновлениями.
Таким образом, мы можем сосредоточиться на хранении данных с избыточностью таким образом, чтобы они хорошо подходили к нашим запросам и были сосредоточены на отдельных коллекциях.
Я просто пишу это, потому что, если бы я читал что-то подобное несколько раз назад, это сэкономило бы мне время на исследования.
Надеюсь это кому-нибудь пригодится