RAIDb的目标:
通过将多个廉价的数据库实例组合到一个数据库阵列,提供比单台数据库更好的性能和容错性。
隐藏分布式数据库的复杂性,提供给数据库客户端一个独立的数据库。
在RAIDb中,一个控制器在其他资源的前面。客户发送他们的请求到RAIDb控制器,这个控制器将他们分发给一组RDBMS后端。
有不同的RAIDb级别或数据分发方案可用,它提供不同的费用,性能,或者容错权衡。
全分割(RAIDb-0)
RAIDb-0 分割数据库表到一个数据库后端节点集。
- 一个表本身不能再分割了。但是不同的表可以分布在不同的后端节点上。
- RAIDb-0 需要至少两个数据库后端。
- RAIDb-0 当前只能和一个控制器配置一起使用。
- RAIDb-0 提供了一定的性能扩展,但不支持容错功能。
注意:
当前的实现不支持分布式join。也就是说如果你想在表t1和t2间进行join操作,你必须确保t1和t2在同一台机器上。
扩展性的提升取决于表的数目和各个表的负载情况:
- 如果你的数据库很大,没有单个节点有足够的容量存放整个数据库,那么RAIDb-0允许你把一个数据库分布存储到到一组节点上。
- 此外,每个数据库引擎处理一个小的数据集可以尽可能的提高缓存利用率,因为总是请求那几个表。
- RAIDb-0存储的使用率是最高的,因为没有重复的信息。
- RAIDb-0需要控制器知道那个表在哪台服务器上,以便把请求导向正确的节点。因为没有重复的表,一直一个后端会执行一个特定的请求。这些信息也可以静态配置到配置文件中,也可以从每个数据库中抓取其schema来动态构建。
全复制 (RAIDb-1)
- RAIDb-1 在一组后端上提供了一个数据库的全镜像。
- RAIDb-1 需要至少两个后端节点,但是理论上后端的数量没有上限的限制。每个后端必须有足够的空间运行整个数据库。
- RAIDb-1 允许在集群配置中使用几个控制器来为关键系统获得高可用性。
RAIDb-1的扩展能力取决于控制器广播更新所有节点的能力。如果有大量后端数据库,使用复合RAIDb可以获得更好的扩展性。
RAIDb-1提供了对读查询的加速,因为他们可以被均衡到所有后端上。另一方面,它对写操作没有加速(update,insert,delete请求),因为他们必须广播到所有节点。写操作在所有的后端并行执行。所以,在写的角度来看,RAIDb-1可能比不上一个单独的节点,但是从读的角度来看,性能会随着后端节点的增加而线性增长。
RAIDb-1有很好的容错性,因为系统即使只有一个后端可用时也可以保持工作。
不像RAIDb-0,RAIDb-1控制器不需要知道数据库的结构,因为所有的节点都有能力处理任何请求。然后,RAIDb-1提供了一个缓存,它需要数据库结构来维护缓存的一致性。
部分复制 (RAIDb-2)
RAIDb-2可以看作是RAIDb-0 和 RAIDb-1权衡下的一个中庸的解决方案。它支持调整每个数据库表的部分复制程度,以获得一个做好的读写性能。
RAIDb-2:
- 要求至少三个数据库后端;
- 要求每个数据库表在至少两个后端上可用以解决单点故障问题。
- 不要求任何一个节点可以运行整个数据库。
下面是RAIDb-2的典型应用:
没有或者只有少数几个节点运行整个数据库,一组节点各自运行这数据库的一部分。
下图中的例子显示了RAIDb-2的部分复制,数据库包含3个表:x,y,和z.第一个后端包含整个数据库,但是其他节点都只包含一个或两个表。表x 和 y有3份拷贝,表z有两份拷贝。任一节点失败,仍然可以从其他的存活节点中找到数据。
RAIDb-2对于异构数据库非常有用。一个已有的企业数据库使用商业数据库,但是要建立一个全拷贝无论是从存储上还是从增加许可的费用上来说,都太贵了。有了RAIDb-2就好办了,你可以增加几个小型开源数据库来各自运行整个数据库中的某些部分来代替整个数据库,这样也可以获得更好的容错性。
RAIDb-2容错性没有RAIDb-1好,但是它有效的改善了写操作的效率。跟RAIDb-0类似,RAIDb-2也要求控制器知道所有数据库的结构,以便将请求定向到适当的节点。
posted on 2008-12-10 21:35
安文豪 阅读(1280)
评论(1) 编辑 收藏