спасибо за ваше время в первую очередь ... после всех поисков в google, github и здесь, и я запутался в громких словах (partition / shard / fedorate) figure Я полагаю, что мне нужно описать конкретную проблему, с которой я столкнулся и спросить вокруг.
Базы данных моей компании работают с массовыми пользователями и заказами, поэтому мы разделяем базы данных и таблицы различными способами, некоторые из них описаны ниже:
way database and table name shard by (maybe it's should be called partitioned by?)
YZ.X db_YZ.tb_X order serial number last three digits
YYYYMMDD. db_YYYYMMDD.tb date
YYYYMM.DD db_YYYYMM.tb_ DD date too
Основная концепция заключается в том, что базы данных и таблицы разделены в соответствии с полем (не обязательно первичным ключом), и существует слишком много баз данных и слишком много таблиц, так что для записи или магического генерирования одной конфигурации database.yml для каждой базы данных и одна модель для каждой таблицы невозможна или, по крайней мере, не лучшее решение.
Я изучил волшебные решения drnic, datafabric и даже исходный код активной записи, возможно, я мог бы использовать ERB для генерации database.yml и установить соединение с базой данных вокруг фильтра, и, возможно, я мог бы использовать named_scope для динамического решения имя таблицы для поиска, но операции обновления / создания ограничены «self.class.quoted_table_name», так что я не мог легко решить мою проблему. И даже я мог бы сгенерировать одну модель для каждой таблицы, потому что ее количество до 30 самое большее.
Но это не СУХОЙ!
Мне нужно чистое решение, подобное следующему DSL:
class Order < ActiveRecord::Base
shard_by :order_serialno do |key|
[get_db_config_by(key), #because some or all of the databaes might share the same machine in a regular way or can be configed by a hash of regex, and it can also be a const
get_db_name_by(key),
get_tb_name_by(key),
]
end
end
Кто-нибудь может меня просветить? Любая помощь будет принята с благодарностью ~~~~