SqlServer 分库分表

分库 

垂直切分(纵向切分)

比如说一个电商平台,里面包含了订单系统,物流系统,仓储系统等,原先是用的同一个数据库,现在我们可以设计成每个系统都有自己的数据库服务器,不公用同一个数据库,不同系统之间的数据可以通过API调用来,这样压力就会小很多。这可以理解为垂直切分。

水平切分(横向切分)

 比如订单系统中数据量很大,导致了数据库的性能问题,我们可以对订单系统数据库进行水平切分。水平分库之后数据库的结构是完全一致的,只是存储的数据不一样而已,比如说一个存储去年的,一个存储今年,,,,可以按照时间来进行切分,如果业务要求查询的数据中一部分在去年,一部分在今年,那就需要程序员在程序中进行处理了。当然实际情况根据实际业务,这里只是做一个假设。还可以按照区域进行切分,比如外卖平台,A数据库存储A区域的数据,B数据库存储B区域的数据。

 还可以简单总结一下就是垂直切分就是把不同的表组合成不同的库,水平分库就是将相同的表分成不同的库

分表

垂直分表(纵向分表)

某些字段的数据不常用,但是又包含在这张表中,而且这些字段很损耗性能(因为存在IO压力);就可以进行垂直切分,一个表存储这个很损耗性能或者不常用的字段,其他比较常用的字段存储在另一个表,两个表可以直接通过两个主键关联(建议使用Guid作为主键);也可以通过主外键关系来关联!

水平分表

比如说一个订单表包含的数据量非常大;有一些数据(两年前的订单数据)也存储在这张表; 就可以水平切分,多个表的表结构是完全一致,但是数据不一样,每个表记录不同时间段的数据(这是以时间为维度进行切分的);比如房产系统(外卖系统),这都可以以区域为维度来进行切分,比如不同的表存储不同区域的数据;还会可以通过指定的算法来进行表的水品切分--把数据均匀分配,慎用。

原文地址:https://www.cnblogs.com/anjingdian/p/15366285.html