Какой тип БД (реляционная/NoSQL и какой тип) выбрать для сложного случая

Для одного из наших SaaS-сервисов мы изучаем, какую базу данных использовать, поскольку мы перепроектируем ее с нуля.

Наше текущее решение использует MySQL и создает отдельную БД для каждого нового клиента. Текущая (глобальная) структура:

- globaldb.globaltable
    => some global data shared with all customers
    => big
    => it would be an option to flatten this data in the customerdb.tablewithreportlines, but this increases the size quite a bit

- customerdb.tablewithstaticdata
    => joins with `globaltable`
    => searched on several columns
    => no group by
    => writes throughout the day, in the thousands
    => reads on request by the customer via the application, so not continuesly
    => can be big per customer, serveral GBs

- customerdb.tablewithreports
    => searched on several columns
    => writes throughout the day, but only in the tens
    => reads on request by the customer via the application, so not continuesly
    => quite small

- customerdb.tablewithreportlines
    => joins with `tablewithreports`
    => joins with `globaltable`
    => most columns are 'searchable'
    => most columns are 'groupable'
    => writes throughout the day, in the thousands but only when processing the `tablewithreports` lines
    => reads on request by the customer via the application, so not continuesly
    => can be big per customer, serveral GBs

Данные customerdb никогда не ОБНОВЛЯЮТСЯ, а только ВСТАВЛЯЮТСЯ (и иногда УДАЛЯЮТСЯ).

Мы готовимся к бурному росту и нуждаемся в готовой к этому структуре. Допускается добавление новых экземпляров (при необходимости) вручную.

Ранее у нас была установка MySQL с очень большим количеством таблиц (и баз данных) для тестового проекта. Этот проект потерпел неудачу, так как сервер превысил максимальное количество обработчиков файлов для таблиц MySQL. Это было около +-500.000 столов. Этот новый проект определенно должен быть в состоянии обрабатывать 500 000 клиентов и, следовательно, 1,5 миллиона таблиц (с этой текущей структурой).

Средний размер одной клиентской базы составляет +- 7,5 Мб. Не слишком много, но это довольно распространено, поскольку у серверных клиентов есть несколько ГБ в их БД.

Я искал SO и Google, чтобы найти подходящую ситуацию, но не смог ее найти.

На данный момент мы открыты для любых предложений, как реляционных, так и NoSQL или их комбинации, поскольку мы делаем полный редизайн.

Вопрос, какая база данных лучше всего подходит для этого варианта использования?

PS: это мой первый пост, так что извините, что я неполный


person DMARC Analyzer - Michiel    schedule 06.01.2016    source источник


Ответы (1)


Я бы предложил рассмотреть возможность использования общей базы данных для всех клиентов. Это радикально сокращает количество столов.

Системы управления базами данных не были рассчитаны на такое большое количество баз данных или таблиц.

Обычно таблица представляет собой одну сущность, представляющую набор объектов одного типа. Таким образом, все объекты одного типа (например, клиенты в вашем случае) должны быть помещены в одну таблицу, а не иметь отдельную таблицу для каждого клиента.

person Dennis Anikin    schedule 17.01.2016