WordPress网站仿制,做网站怎么在国外服务器租用,外贸网站建设公司策划,常州seo第一人一文带你读懂分库分表,分片,Sharding的许多概念
分库是将一个库拆分为多个库#xff0c;分表就是将一个表拆分为多个表。分库分表有垂直拆分和水平拆分。垂直拆分一般是按照业务将表分到不同的库中#xff08;此种不在本发的讨论范围#xff09;。水平拆分是将表的数据拆分…一文带你读懂分库分表,分片,Sharding的许多概念
分库是将一个库拆分为多个库分表就是将一个表拆分为多个表。分库分表有垂直拆分和水平拆分。垂直拆分一般是按照业务将表分到不同的库中此种不在本发的讨论范围。水平拆分是将表的数据拆分到多个表中此种为本发明的研究对象。当一个表存的数据太多时,可以将表的数据拆分到多个表中,这些拆分后的表可以在同一个数据库也可以不在同一个数据库,会有:只分表,只分库,和分库分表三种类型,如图1所示。图1所示的分库分表就是将一个orders表拆分为4个表orders0、orders1在库ds0, orders2、orders3在库ds1。其中orders0到orders3是实际表/物理表而0、1、2、3是实际表的下标/后缀而orders则为基本表基本表名。关联表(主表与从表)指存在主外键关系的主表与从表按照一定的DB设计原则将数据存放到两张表中。如ordersorders_item usersusers_item它们一般都是有外键关系未必使用外键约束。此外还有不需要分片的只存在一个库中的表为原始表/未分片表因为并不是所有的表都是要分片的广播表指所有的分片数据库中都存在的表同一广播表在每个节点都有一个且数据也一样表结构及其数据在每个数据库中均完全一致。 适用于数据量不大且需要与海量数据的表进行关联查询的场景例如字典表。分片键即用来寻找到对应库和表的表中字段分片键包括分库键和分表键。分库键指表的字段中使用其值按一定算法找到唯一数据库的字段。如orders订单表中userid(用户id可以作为分库键。分表键指表的字段中使用其值按一定算法找到唯一实际表的字段。比如orders订单表中userid(用户id)可以作为分表键。数据节点为数据分片的最小单元由数据源名称和实际表组成如ds1.orders1。完整的数据结点(fullNodes)指某一基本表所涉及的所有数据库和对应的实际表。数据源ds是指配置了数据库url,用户名密码等信息的源在Java中是指javax.sql.DataSource。数据源与数据库对应在不引起混淆的情况下可以将该两个名词视为同义词。路由到的库与表种类即分库分表种类或分片种类,根据分片键找到的库与表的个数分为一库一表、一库多表、多库多表、全库全表。分片指分库分表并通过一定的方法找到或操作所要的数据。分片的框架或装置要让使用者在有分片的情况下操作的数据与未分片时感觉是一样的当然打印的日志可以提示有哪个节点执行了什么操作。 Bee, 一个具有分片功能的ORM框架,简单易用,功能强大.
除了分片配置信息分片对使用者透明系统是否分片对使用者来说无需增加过多额外成本掌握配置规则即可使用。进行分片升级对原有系统更改小引用接口模块的接口不需要调整。分片时执行的sql语句与未分片时对比差别小。分片的sql语句易于在数据库客户端工具中进行格式化。分片节点结构变动后可以不转移旧的数据。 一个表的分片配置信息,只需要一行:
ShardingConfig.addShardingBean(Orders.class,new ShardingBean(ds[0..1].orders[0..3], orderid));