Я помню из подкастов stackoverflow, что Fog Creek использует базу данных для каждого клиента для Fogbugz . Я предполагаю, что это означает, что серверы Fogbugz On Demand имеют 10 тысяч баз данных.
Мы только начинаем разрабатывать веб-приложение, и нам предстоит решить аналогичную проблему (множество клиентов со своими изолированными данными).
Какие проблемы мне следует ожидать с использованием базы данных для каждого клиента? Как я могу их решить?
Мои первоначальные мысли
Преимущества базы данных для каждого клиента
- Упрощенная схема базы данных
- Упрощенное резервное копирование - вы можете создавать резервные копии каждого клиента по очереди, не оказывая реального влияния на других клиентов.
- Упрощает экспорт данных о клиентах.
- Лучшая производительность кэша - запись в одну из более активных таблиц влияет только на одного клиента, который выполнил запись.
- Проще масштабировать по аппаратному обеспечению. Например, когда нам нужно перейти с 1 на 2 сервера, мы просто перемещаем половину наших клиентов на новый сервер.
Недостатки
- Может ли MySQL справиться с 5000 базами данных? Будет ли производительность отстой?
- Изменения в схеме могут быть трудно воспроизвести во всех базах данных. Нам действительно нужно иметь автоматизированный план для этого, такой как создание версий схемы и сценария, который понимает, как переносить базу данных из одной версии в другую.
- Делать что-либо общее для всех наших клиентов может быть неудобно или невозможно
- Как и выше, но любая аналитика, которую мы хотим выполнить для всех наших клиентов, может оказаться невозможной. Как мы должны отслеживать использование для всех клиентов, например?
USE CompanyData;