基于Amoeba的数据垂直切分

垂直切分(纵向)数据是数据按照网站业务、产品进行切分,比如用户数据、博客文章数据、照片 数据、标签数据、群组数据等等每个业务一个独立的数据库或者数据库服务器。

如果一个应用只针对单纯的业务功能模块。那么可以直接连接相应的被垂直切分的数据库。但一些复杂的应用需要用到相当多的业务数据,涉及到几乎所有的业务数据。那么垂直切分将会给应用带来一定的复杂度,而且对工程师开发也会有一定影响。整个应用的复杂度将上升。

Amoeba在其中充当了门面功能,相当于水利枢纽。疏通应用与多个数据库数据通讯。

假设有3个数据库:userdb、blogdb、otherdb

userdb:包含有user表

blogdb:包含有message、event

otherdb:其他表所在的数据库

数据的垂直切分主要通过对rule.xml文件的配置,如以下这个配置示例:

Example 4.2. 通过配置rule.xml完成垂直分区

<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:rule SYSTEM "rule.dtd">

<amoeba:rule xmlns:amoeba="http://amoeba.meidusa.com/">
...
   <tableRule name="USER" schema="test" defaultPools="userdb"/>1
   <tableRule name="MESSAGE" schema="test" defaultPools="blogdb"/>
   <tableRule name="EVENT" schema="test" defaultPools="blogdb"/>
...
</amoeba:rule>

1

通过配置tableRule中的表名、数据库名及其对应的默认数据库池可以完成垂直切分的功能。defaultPools属性的值需要是在dbServers.xml中定义过的某个虚拟数据库节点或者真实数据库节点。