首先感谢您的时间...在通过Google、GitHub和这里进行了所有搜索之后,对于诸如分区/分片/联邦等大词汇感到更加困惑,我意识到我必须描述我遇到的具体问题并寻求帮助。
我的公司数据库处理大量用户和订单,因此我们以各种方式拆分数据库和表,其中一些如下所述:
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配置文件和每个表的一个model并非最佳解决方案,甚至不可能。
我研究了drnic的魔法解决方案、datafabric甚至active record的源代码,也许我可以使用ERB生成database.yml并在around过滤器中进行数据库连接,也许我可以使用named_scope动态决定find的表名,但更新/创建操作绑定到“self.class.quoted_table_name”,所以我无法轻松解决我的问题。即使我可以为每个表生成一个模型,因为它们的数量最多只有30个。
但这并不是DRY!
我需要的是像以下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
有人能给我指点一下吗?任何帮助都将不胜感激~~~