业务分库,垂直拆分,水平拆分
常见的分库方式有水平性和垂直性。一般来说,就是按照用户属性(地市或者ID的hash)进行分库,或者按照业务功能块进行分库。
水平分库方式:根据用户属性(如地市)拆分物理数据库。一种常见的方式是将全省划分为几个大区。
垂直分库方式:根据业务维度和数据的访问量等,进行数据的分离,剥离为多个数据库。例如,将一些公用的配置信息存储到一个数据库中进行单独维护。
垂直划分
按照功能划分,把数据分别放到不同的数据库和服务器。
其实在一个大型而且臃肿的数据库中表和表之间的数据很多是没有关系的,或者更加不需要(join)操作,理论上就应该把他们分别放到不同的服务器。例如用户的收藏夹的数据和博客的数据库就可以放到两个独立的服务器。这个就叫垂直划分。
当博客或者收藏夹的数据不断增加后,应该怎么办,这样就引出了另外一个做法,叫水平划分。
水平划分
则把一个表的数据划分到不同的数据库,两个数据库的表结构一样。怎么划分,应该根据一定的规则,可以根据数据的产生者来做引导,上面的数据是由人产生的,可以根据人的id来划分数据库。然后再根据一定的规则,先获知数据在哪个数据库。
以刚才的博客为例,数据可以根据userid的奇偶来确定数据的划分。把id为基数的放到A库,为偶数的放B库。
这样通过userId就可以知道用户的博客的数据在哪个数据库。其实可以根据userId%10来处理。还可以根据著名的Hash算法来处理。
注意:
a.最好分到同一个数据库。
b.一种已经证明是切实可行的方案:主表+辅表。
c.有3种类型:主表不打散、主表打散无辅表、主表打散有辅表。
d.但对程序员来说,TA看到的只是一张表,不妨称之为虚表(逻辑表)? ,这张虚表实际上可能是由N张实表(物理表)组成的。
参考:
http://blog.csdn.net/xingjing1226/article/details/51907220
http://blog.csdn.net/zljjava/article/details/38422387
相关推荐
本文将详细介绍数据库中的分表分库技术,特别是垂直拆分和水平拆分两种主要方式。 #### 一、分表分库概述 分表分库是指将一个大的数据表或数据库拆分成多个较小的数据表或数据库的过程。这种做法能够有效提升...
在面对大量数据时,为了提高系统性能,我们常常需要采用一些数据库优化策略,如垂直拆分、水平拆分和读写分离。这里我们将详细讨论如何基于MyBatis框架实现这些策略,并结合Spring进行整合。 **一、MyBatis框架** ...
水平拆分(Sharding)是指将数据按照一定的规则分散到多个数据库中,每个数据库存储一部分数据,以减轻单个数据库的压力。垂直拆分则是指根据数据的相关性和访问频率,将数据表分散到不同的数据库上,优化查询效率。...
分库分表的概念、垂直拆分与水平拆分、分片策略和分片算法是Sharding-JDBC中核心的知识点,下面将对这些概念进行详细的解释。 ### 分库分表概念 分库分表是为了解决随着业务数据量的不断增长,单库单表模式面临的...
数据库分库分表的几种方式主要包括垂直分库、垂直分表、水平分库和水平分表。垂直分库是按照业务的不同进行数据库的分割,每个数据库只包含部分业务的数据;垂直分表是将一个表按照字段划分成多个表,通常按照数据的...
- **垂直拆分**:依据业务逻辑,将关联性较弱的表分离到不同的数据库中,减少数据冗余,提高查询效率。例如,用户信息和订单信息可以分别存储在用户库和订单库中。 - **水平拆分**:根据字段值(如用户ID的哈希值...
总的来说,面对数据库写入数据量增加的情况,通过垂直拆分和水平拆分,可以有效地提高系统性能,支持大数据量存储,增强故障隔离能力,并适应高并发写入需求。但实施过程中需谨慎,避免常见误区,确保数据库系统的...
垂直分库则是将原本存储在同一个数据库中的不同业务模块拆分到不同的数据库中。在垂直分库中,不同模块的表会放到不同的数据库中,以降低业务之间的耦合性,并且每个数据库只关注特定业务的数据,从而提高了系统的可...
1. **数据库垂直拆分**:垂直拆分是将一个大表按照业务逻辑拆分成多个表,通常依据业务功能或数据关联性来进行。例如,用户信息和订单信息可以分别存放在不同的数据库中,以此降低单表的数据量,提高查询效率。 2. ...
1. **垂直分库**:根据业务领域或数据关联性,将相关表划分为不同的数据库。例如,将用户信息、订单信息等分别存储在独立的数据库中,减少跨表查询,提高数据访问效率。 2. **水平分表(Sharding)**:依据一定的...
### 又拍网架构中的分库设计 #### 一、背景与挑战 又拍网作为一个照片分享社区,自2005年成立以来积累了大量的用户和...未来,随着技术的发展和业务需求的变化,又拍网将继续探索更加高效的数据管理和分库设计方法。
垂直拆分是根据业务逻辑将表划分到不同的数据库中,使得每个数据库专注于特定的业务领域。优点包括业务清晰、系统整合和扩展容易,但缺点是可能导致部分业务表无法 join,增加系统复杂度,同时单库性能可能成为瓶颈...
业务分库是指将业务逻辑按照不同的业务类型进行拆分,每个业务类型对应一个独立的数据库实例。业务分库可以减少数据库的压力,提高业务的可维护性和可扩展性。例如,在电商平台中,可以将订单、商品、用户三个业务...
分库是指将一个大型数据库拆分为多个小型数据库,每个数据库负责一部分数据。这样做可以将读写操作分散到不同的数据库服务器上,减轻单台服务器的压力,提高系统的并行处理能力。分库通常基于业务模块或者用户分组...
垂直拆分是根据业务将一个库(表)拆分为多个库(表),而水平拆分则是根据分片算法将一个库(表)拆分为多个库(表)。 在项目实践中,我们使用 Sharding-JDBC 实现数据库水平分片框架,实现透明化数据库分库分表...
ShardingJDBC作为一个轻量级的Java库,能够在不修改现有数据库架构和业务代码的情况下,仅通过配置即可实现分库分表。它具备良好的兼容性,可以与任何Java应用无缝集成,包括但不限于Spring、MyBatis等。在本项目中...
- 垂直分库是根据业务模块的耦合程度,将不同业务的表分散到不同的数据库中,降低业务间的相互影响,类似于微服务架构,每个业务模块使用独立的数据库。 - 垂直分表是基于字段进行的,将大表的非核心字段或者不常...
水平切分分为库内分表和分库分表,根据表内数据的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只能包含一部分数据。 三、分表与分区的差别 分表是将一张大表的多个字段拆分成几张小表...
2. 事务问题:原本在同一个数据库中不同的表可以在同一个事物中修改,业务分库后,表分散到不同的数据库中,无法通过事务统一修改。 3. 成本问题:业务分库同时也带来了成本的代价,本来 1 台服务器搞定的事情,现在...
分库分表,即数据库垂直拆分和水平拆分。垂直拆分是根据业务逻辑将相关的表聚合到一起,形成不同的数据库,降低单个数据库的复杂性;水平拆分则是将一张大表的数据分散到多个表或数据库中,以减小单表的数据量,提高...