Я не собираюсь освещать ваш вопрос по объединению. Тем не менее, я уверен, что объединение поможет многое улучшить. У меня также есть установка, где у каждого клиента есть своя собственная база данных, и кодовая база распределяется между ними.
Метод анализа URL-адресов реализован вне Rails в конфигурации Apache Rewrite, поскольку несколько хостов могут быть сопоставлены одному клиенту. Также я использую «ключ» клиента для доступа к кэшированным файлам на диске веб-сервера. Переписать конфигурацию выглядит примерно так:
RewriteMap accounts prg:domain_mapper.rb
RewriteMap lowercase int:tolower
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteCond ${accounts:${lowercase:%1}} ^(.+)$
RewriteRule . - [E=ACCOUNT:%1]
RequestHeader set Customer-Key %{ACCOUNT}e
И ключ клиента будет привязан непосредственно к имени базы данных, которое будет подключено в методе before_filter.
Пока что переключение соединения с базой данных на стороне Rails не является проблемой производительности. Проблемы в конфигурации MySQL, и мы сталкиваемся с проблемами, когда слишком много баз данных и слишком много запросов вызывают слишком много открытых баз данных в MySQL.
Я уверен, что вы рассматривали проблемы миграции. В начале не было проблем со схемами баз данных <2000. Сейчас существует> 15 000 клиентских баз данных (и их число растет), поэтому мы объединяем их в небольшое количество сегментированных баз данных.