首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

关于分库区域的了解与计算规格

2012-08-08 
关于分库区域的理解与计算规格?//关于分库区域计算/** * 首先要明确思考的两个问题* 第一 根据用户Id是怎

关于分库区域的理解与计算规格

?

//关于分库区域计算/** * 首先要明确思考的两个问题  * 第一 根据用户Id是怎样找到他录入的数据库呢? * 目前项目中的规格是5个RPT_USER库 一套表最多保存20W用户 总规格按照1KW用户算的话 * 那么 每个库要保存10套表 那么怎样寻找当前Id用户存储在那个库中的哪套表呢 * 第二 根据当前用户Id是怎样找到这个Id用户录入到哪张表了呢? *  */     /* 总结分库区域的原理  * 关于分库区域计算 1根据用户所在的区域 2查找用户被录入到哪套表里面去了     * 3根据这套表数目和用户对应的ID 进行散列取模操作 得到的值即为shard_id  * 4根据shard_id 即可找到 该当用户对应的表名称 及其数据库 * 另外i如果是汇总用户 自己根据用户Id 即可找到原始表 **/select * from MNT_CONF_USER_INFO(根据系统几级分库对应Leavl 用户信息表)select * from MNT_CONF_SYSTEM(找到系统几级分库 系统安装时默认设置的分库信息表存在此处)select * from MNT_CONF_USER_AREA(根据Leavl找到PKID 用户对应的区域表)select * from MNT_CONF_DBAR_INFO(根据PKID找到Shard_Id 用户散列对应存储的库信息表)//根据shard_id 找到分库区域表中对应的列表 其中AREA表和DBAR_INFO一对多关系//得到对应的 分库区域的行记录 groupId为标记该区域下有多少套表 根据custAreaDbList = userDbarInfoMap.get(groupId);// 使用该用户对应区域表组下的表个数对用户ID求模 int modNum = (int) (objId % custAreaDbList.size());//根据行记录 拿到了 用户对应的数据库信息//从而获得该用户 散列到哪个数据库 那张表!///单个库最多部署200W用户,1套表最多20W用户 套表只针对 单用户而言//1套表包含288张分钟表(24×12/单表最多300W实际用户200W左右)93张天表(31×3)//48张月表(12×4/单表数据最多600W) /p>//根据shard_id 找到分库区域表中对应的列表custAreaDbList = userDbarInfoMap.get(groupId);// 使用该区域表组下的表个数对用户ID求模 然后使用对象id 取模 //得到对应的 分库区域的很记录int modNum = (int) (objId % custAreaDbList.size());//根据行记录 拿到了 用户对应的数据库信息//从而获得该用户 散列到哪个数据库 那张表!///单用户对应5个库,单个库最多部署200W用户,1套表最多20W用户 套表只针对 单用户而言//1套表包含288张分钟表(另外有AB表24×12/单表最多300W实际用户200W左右)168张小时表(7*24)93张天表(31×3)//48张月表(12×4/单表数据最多600W)/** * 关于本文开头的第一个问题  我觉得应该有两种解决方案 * 1 集中式存储 比如用户ID为1-20W的用户存储在第一套表 以此类推 * 2 离散式存储 这个应该会更好 可以平均分配性能 最后用户ID的最后1位等于几则存储在第几套表中 * 这个 既可以解释 当前用户录入哪个库(比如用户Id 在1到200W之间 就存储在第一个库中 依此类推) * 也可以解释当前用户存储于哪套表中(比如Id末位位1 这存储在第一套表中) *  */
5分钟表 15天小时 6周天表 半年 

热点排行