比如针对评论数据, 可按照商品 ID 进行 hash, 路由到对应的表中存储; 针对支付记录, 可按照小时创建表, 每个小时表继续
拆分为小表, 使用用户 ID 或记录编号来路由数据. 只要实时操作的表数据量足够小, 请求能够足够均匀的分发到多台服务器
上的小表, 那数据库就能通过水平扩展的方式来提高性能. 其中前面提到的 MyCat 也支持在大表拆分为小表情况下的访问
控制.
这种做法显著的增加了数据库运维的难度, 对 DBA 的要求较高. 数据库设计到这种结构时, 已经可以称为分布式数据库, 但
是这只是一个逻辑的数据库整体, 数据库里不同的组成部分是由不同的组件单独来实现的, 如分库分表的管理和请求分发,
由 Mycat 实现, SQL 的解析由单机的数据库实现, 读写分离可能由网关和消息队列来实现, 查询结构的汇总可能由数据库接口
层来实现等等, 这种架构其实是 MPP(大规模并行处理) 架构的一类实现.
目前开源和商用的已经有不少 MPP 数据库, 开源中比较流行的有 Greenplum,TiDB,PostgreSQL XC,HAWQ 等, 商用的如
南大通用的 GBase, 睿帆科技的雪球 DB, 华为的 LibrA 等等, 不同的 MPP 数据库的侧重点也不一样, 如 TiDB 更侧重于分布式
OLTP 场景, Greenplum 更侧重于分布式 OLAP 场景, 这些 MPP 数据库基本都提供了类似 PostgreSQL,Oracle,MySQL 那样
的 SQL 标准支持能力, 能把一个查询解析为分布式的执行计划分发到每台机器上并行执行, 最终由数据库本身汇总数据进行
返回, 也提供了诸如权限管理, 分库分表, 事物, 数据副本等能力, 并且大多能够支持 100 个节点以上的集群, 大大降低了
数据库运维的成本, 并且使数据库也能够实现水平扩展.
数据库和 Tomcat 都能够水平扩展, 可支撑的并发大幅提高, 随着用户数的增长, 最终单机的 Nginx 会成为瓶颈.
来源: http://www.bubuko.com/infodetail-3230872.html