
Mysql 的分区技术与水平分表有点类似, 但是它是在逻辑层进行的水平分表, 对于应用而言它还是一张表, 换句话说: 分区不是实际真正的对一张表进行拆分,分区之后表还是一个表,它是把存储文件进行拆分。
在 Mysql 5.1(后) 有了几种分区类型:
RANGE分区: 基于属于一个给定连续区间的列值, 把多行分配给分区
LIST分区: 类似于按 RANGE 分区, 区别在于 LIST 分区是基于列值匹配一个离散值集合中的某个值来进行选择
HASH分区: 基于用户定义的表达式的返回值来进行选择分区, 该表达式使用将要插入到表中的这些行的列值进行计算, 这个函数可以包含 Mysql 中有效的、产生非负整数值的任何表达式
KEY分区: 累世于按 HASH 分区, 区别在于 KEY 分区只支持计算一列或多列, 且 Mysql 服务器提供其自身的哈希函数
Hash Global分区索引介绍
HASH-Partitioned Global索引是Oracle 10g开始提供的新特性。而在以前的版本中
,Oracle只支持Range-Partitioned Global索引。HASH-Partitioned Global索引的好处如下:
比Range-Partitioned Global索引易于实施。HASH-Partitioned Global索引是根据
索引字段值,通过Oracle内部的HASH算法自动均匀散列到定义的分区中。而
Range-Partitioned Global索引需要根据索引字段值的范围进行分区,因此实施和
维护的难度都大。
HASH-Partitioned Global索引适合于在并发量、吞吐量很大的交易系统(OLTP)
中,对某些字段的访问冲突。尤其是sequence字段值。
HASH-Partitioned Global索引适合于大批量的数据查询。HASH-Partitioned Global索引不仅可以提供分区之间的并行查询,
而且在分区内也可进行并行查询的处理。
建立分区索引必须指定表空间,并且指定的表空间要与数据表空间分开,
这样便于管理,同时尽可能分开索引和数据的IO访问,提高效率
from askmacleantdsql建表partition用字符类型 首先TDSQL除了跟GaussDB很像外,跟中兴的GoldenDB更像一个模子里刻出来的。这也让潭主想到了“分形”,细看TDSQL的每个Shard,其实都是一个独立的、基于PGSQL的一主多从架构。为了应对分布式和大数据,TDSQL引入了ShardMap机制,解决了集群扩展问题。ShardMap功能实现在TDSQL里叫“Shard Group”,需要为每个NodeGroup建立对应的ShardMap。ShardMap用于维护ShardID和DN之间的映射关系,根据算法,不同的ShardID被分配到不同DN上,当集群扩容增加DN时,只需改变ShardMap中的对应关系就能实现数据重分布。特性二:均衡分布与冷热分级实际场景中,大数据量在Hash时可能会出现分布不均的情况,TDSQL可以设置特殊分布逻辑,比如在Hash取模后,再增加一个时间偏移量来均衡数据分布。而OceanBase分区表的技术细节中,可以直接通过表达式(字段+偏移量)来进行Hash分区,表面上看差不多,但本质上却完全不同,一个是ShardMap,一个是Table Partition。TDSQL建表时使用的是Partition by和 Distribute by Shard关键字,而OceanBase则是Partition和Subpartition。再说冷热分级,在传统数据库中,比如基于时间的范围分区和不同存储介质类型表空间的组合就可轻易实现冷热分离,并对用户无感知。到了分布式数据库,专用存储被干掉了,虽说本质上还是SSD和SATA的事,但在TDSQL中却表现为冷热节点组的选择了。在建表时设定时间界限并指定两个分区组来区分冷热,剩下的就交给后台任务,定时根据用户配置规则自动进行数据迁移。特性三:TDSQL的多租户管理目前看,几家公有云大厂的分布式数据库在细节上差异不小,TDSQL的整个物理资源均由OSS系统控制,租户即账户,租户之下才是TDSQL的实例。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)