Я создал хорошую систему веб-сайтов, которая обслуживает потребности небольшого нишевого рынка. Я продавал эти сайты в течение последнего года, развернув копии программного обеспечения с использованием Capistrano на моем веб-сервере.
Мне приходит в голову, что единственным отличием на этих веб-сайтах является база данных, файл CSS и небольшой набор изображений, используемых для графического дизайна отдельного клиента.
Все остальное точно так же, или должно быть ... Теперь, когда у меня развернуто около 20 таких сайтов, становится все труднее держать их все в одном и том же коде. И эта проблема только усугубится.
Я думаю, что мне следует провести рефакторинг этой системы, чтобы я мог использовать один набор развернутого кода ruby, динамически выбирать правильную базу данных и т. Д. По URL-адресу входящего запроса.
Кажется, что есть два способа обработки базы данных:
- с использованием нескольких баз данных, по одной для каждого клиента
- с использованием одной базы данных, с полем client_id в каждой таблице и дополнительной таблицей 'client'
Подход с несколькими базами данных был бы для меня самым простым на данный момент, поскольку мне не пришлось бы реорганизовывать каждую модель в моем приложении, чтобы добавить поле client_id ко всем операциям CRUD.
Однако было бы хлопотно запускать rake db: migrate для десятков или сотен различных баз данных каждый раз, когда я хочу перенести базы данных. Очевидно, что это можно сделать с помощью сценария, но он не очень хорошо пахнет.
С другой стороны, у каждого клиента будет 20–50 тыс. Элементов в таблице «элементы». Меня беспокоит скорость полнотекстового поиска, когда в таблице предметов содержится полмиллиона или миллион предметов. Я подозреваю, что даже при наличии индекса в поле client_id поиск будет быстрее, если элементы будут разделены на разные клиентские базы данных.
Если у кого-то есть осознанное мнение о наилучшем способе решения этой проблемы, я бы очень хотел услышать его. Большое спасибо заранее ...
- Джон