Skip to content

C#客户端 数据库分片

Yenan Wang edited this page Dec 11, 2017 · 9 revisions

简介

  • C# DAL Client当前支持分库,分表,同时分库分表共三种数据库分片模式。
  • C# DAL Client当前内置了取模和范围两种分片策略,同时开放了分片策略的接口,用户可以根据自己的需求实现自定义的分片策略。

DB Sharding

shardingStrategy="class=Arch.Data.DbEngine.Sharding.ModShardingStrategy;column=ID;mod=2;shardByDB=true"

shardingStrategy属性详解

  • class:指定分片的策略,当前内置了取模和范围两种策略,分别用Arch.Data.DbEngine.Sharding.ModShardingStrategy和Arch.Data.DbEngine.Sharding.SequenceShardingStrategy来表示;
  • column:用于分片的数据表字段,多个字段请用逗号隔开;
  • mod:模值,索引从0开始,用于取模分片策略,必须与所配置的数据库数量相符,与sharding属性有依赖关系;
  • shardByDB:在分库模式下,请设置为true,默认值为false;

手动指定DB分片

IDictionary hints = new Dictionary<String, Object>(); hints.Add(DALExtStatementConstant.SHARDID, "0"); //Value可以是任意值

  • 调用任意支持hints参数的重载方法即可

Table Sharding

shardingStrategy="class=Arch.Data.DbEngine.Sharding.ModShardingStrategy;column=ID;mod=2;shardByDB=false;shardByTable=true">

shardingStrategy属性详解

  • class:同上;
  • column:同上;
  • mod:同上;
  • shardByTable:在分表模式下,请设置为true,默认值为false;
  • 在分表模式下,除了需要如上配置外,还需要把实体的Table特性改为类似于[Table(Name = "TableName_{0}")]这样,即在表名后加上_{0}后缀;

手动指定Table分片

IDictionary hints = new Dictionary<String, Object>(); hints.Add(DALExtStatementConstant.TABLEID, "0"); //Value可以是任意值

  • 调用任意支持hints参数的重载方法即可

DB-Table Sharding

手动指定DB-Table分片

IDictionary hints = new Dictionary<String, Object>();

hints.Add(DALExtStatementConstant.SHARDID, "0"); //Value可以是任意值

hints.Add(DALExtStatementConstant.TABLEID, "0"); //Value可以是任意值

  • 调用任意支持hints参数的重载方法即可