Я вже деякий час використовую БД NoSQL, і це мій внесок у тему:
Чудовим випадком використання бази даних NoSQL є додаток для створення статистики та / або звітів , особливо, коли дані надаються від сторонніх джерел.
У такій ситуації, як база даних NoSQL може стати чудовим вибором
Розглянемо, наприклад, MongoDB :
Коли ви отримаєте свої дані в JSON (він може надходити від стороннього API або бути експортований з sql-додатку) в MongoDB досить важко імпортувати та оновлювати дані JSON в базі даних; наприклад, використовуючи mongoimport
утиліту командного рядка
На даний момент дуже просто створити динамічні запити з фільтруванням та групуванням, які добре підходять до цього типу додатків.
Наприклад, використовуючи Рамку агрегації :
$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:
Відсутність транзакцій. Програма не виконує записи, а лише читає, тому транзакції нам взагалі не потрібні
Відсутність з'єднань між таблицями: нам не потрібні об'єднання, оскільки ми можемо використовувати надмірність для зберігання наших денормалізованих даних у колекціях. Оскільки ми читаємо лише дані, нам не потрібно турбуватися про синхронізацію денормалізованих даних серед оновлень.
Таким чином, ми можемо зосередитись на збереженні даних із надмірністю таким чином, щоб вони добре відповідали нашим запитам , які будуть зосереджені на одній колекції.
Я просто пишу це, бо якби я читав щось подібне кілька разів тому, це врятувало б мені деякий час для проведення досліджень
Сподіваюсь, комусь це буде корисно