免费注册
帮助文档(华北一、二)

  • 业务使用InDDB有三种典型方式:

    读写分离:InDDB只配置单个存储节点,下挂多个只读实例;业务的数据库表结构保持和单机数据库一致, 利用InDDB中间件节点分发读请求;

    垂直分库:InDDB配置多个存储节点, 每个存储节点保存业务数据库若干个表, 但表不做拆分,由InDDB中间件提供统一的访问地址。当单个业务的数据量已达单机数据库上限,但单个表的容量并未达到上限时,可以采用该方法解决单机数据库的容量问题。

    水平拆分:InDDB配置多个存储节点, 将大表通过水平拆分的方式,分拆到多个存储节点进行存。当单个表的数据量达到单机数据库上限时,可以采用该方法解决单机数据库的容量问题。

    下面分别介绍InDDB在这三种模式下,对MySQL的兼容程度。

    读写分离

    读写分离模式下,InDDB能够做到对MySQL 100%的兼容。 包括:

    1、 SELECT语句和INSERT/UPDATE/DELETE/REPLACE等DML语句,支持SQL Prepare;

    2、CREATE TABLE/CREATE INDEX等DDL语句;

    3、支持事务。

    4、系统管理命令,如SHOW/SET/GRANT等。

    5、MySQL的高阶功能, 如视图、触发器、存储过程、事件等。

    6、MySQL系统函数全部支持,支持LOAD DATA命令。

    但是, 我们并不建议业务使用InDDB来做读写分离,因为已经有更好的产品:InDDB读写分离中间件。InDDB读写分离中间件是从InDDB中间件代码中,专门抽取出读写分离的代码(并做了高度精简)构建而成, 具有轻量、高性能、MySQL 100%兼容的特点。该中间件永久免费, 后续将增加更多数据库管理特性, 目标是成为一款读写分离最高效、数据库管理功能最强大的中间件产品。

    垂直分库

    垂直分库模式下,业务SQL必须保证所操作的库表对象,都位于同一个存储节点;不支持跨存储节点的SQL操作。

    如果操作对象都位于同一个存储节点,业务的MySQL兼容性,和读写分离模式保持一致。

    同时,在垂直分库模式下,可以在存储节点下挂载多个只读实例,来对某个存储节点上的库表进行读写分离。

    水平拆分

    水平拆分模式下, MySQL的兼容性是有损的。具体而言:

    1、SELECT语句, 不支持划分规则不一致的多表JOIN。 比如, 不支持一张做了水平划分的表,和另一张没做水平划分表的join;不支持一张按照uid划分的tuser表, 和按照orderid划分的torder表的join。 也不支持一张按uid划分成4份的tuser表, 和另一张按uid划分成5份的t_order表的join。SELECT语句, 支持划分规则完全一致的多个表的join。 比如:三张表t1,t2,t3均按照id划分为4份,对于三张表join的SQL语句,InDDB能够支持。

    2、不支持SQL PREPARE。

    3、INSERT/UPDATE/DELETE/REPLACE等DML语句只能操作单个分片, 不支持同时操作多个分片的DML语句。

    4、支持所有SQL语句落到同一个分片的事务,不支持跨分片操作的事务。

    5、不支持涉及到水平拆分表的MySQL的高阶功能, 如视图、触发器、存储过程、事件等。

    6、支持全部针对库表对象的DDL,支持用户权限管理命令GRANT。

    7、SET命令,只支持:

    7.1 SET names ’charset_name‘

    7.2 SET names ’charsetname‘ COLLATE 'collationname'

    7.3 set autocommit=0/1

    其他Set命令可以通过,不报错, 但不会生效。

    支持所有SHOW命令、支持LOAD DATA命令。

    注:在水平拆分模式下,也可以在存储节点下挂载多个只读实例,来对某个存储节点上的库表进行读写分离。


文档是否已解决您的问题?

  已解决   未解决

如您有其它疑问,您也可以与我们技术专家联系探讨。

联系技术专家