首先感谢您的时间...在google,github和here上搜索之后,对大词(partition/shard/fedorate)更加困惑,我想我必须描述我遇到的具体问题并四处询问.
我公司的数据库是处理海量用户和订单的,所以我们对数据库和表进行了多种拆分,下面分别介绍:
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
任何人都可以启发我吗?任何帮助将不胜感激~~~~