Для одного из наших 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: это мой первый пост, так что извините, что я неполный