通过中间件的形式为前台提供一台虚拟的数据库服务器,而中间件在后台实际管理着多个数据库节点,允许将单张表分布到不同的数据库节点上进行性能均衡。
总体架构:
master管理服务器,提供资源分配,负载统计等总多功能;
DBN(database node)数据库节点服务器;
DBI(database interface)数据库访问接口,部署在客户机上,以jar包的形式提供给应用程序使用,提供查询处理功能,隐藏了数据访问的复杂性;
数据的分区和负载均衡:
数据的水平分区方式:hash分区;
系统采用hash表和映射表两级映射的方式实现:首先根据一个固定的hash算法和特定的字段值将表中的每条记录映射到一个hash桶上,然后使用一个动态可调的map将多个hash桶映射到一个存储节点上,这个计算hash值的字段称为均衡字段。
两级映射方案,消除了直接使用hash表无法调整和直接使用map映射占用空间过大的缺点,扩充后端节点时,仅需要修改map映射就能完成迁移;同类数据之间宜采用相同的分区或者均衡策略(均衡字段和hash算法),在进行负载均衡调整时以桶为单位进行统一处理。
数据库表均衡字段的选择:
1. 对于表中字段a,当且仅当访问这个表时经常指定a上的等值条件时,字段a才是一个好的均衡字段候选人;
2. 当依据规则一产生多个候选均衡字段时,倾向于用distinct值比较多的那个;
如student(name,dept专业,age...)访问这张表总是指定name和dept的等值条件,则选择name;
3. 当多个表需要使用相同的均衡策略时,表的均衡字段选取要统一考虑;
4. 表之间存在外键的引用关系时,最好使用同一个均衡策略;
分布式查询:
分布式数据库中间件需要提供透明的数据访问接口,在中间件中采用了分布式查询处理技术实现了这种透明的sql语句执行功能:系统解析输入的sql语句,根据查询条件访问map存储映射表,得到需要访问的后台存储节点,并生成查询计划。查询计划包括对各个存储节点的查询以及对多个节点返回结果的进一步处理。
原文地址:http://blog.51cto.com/13580976/2103500