`

说说sharding

阅读更多
这个东西一面试就有人想问,还不明着问,开个帖子收集相关的东西

简单介绍

我们IE上有个实践讨论讨论很不错

http://argan.iteye.com/blog/368453

引用

​摘要:

数据库的sharding技术作为一个“新瓶装旧酒”的概念,在新的应用环境中被赋予了新的意义。随着云计算的发展,sharding在最近几年是越来越火热,越来越多的产品开始声称自己支持sharding功能。那么到底什么是sharding,sharding到底能为你的数据库应用带来哪些好处。另外最重要的,如何实现一个sharding系统,有哪些sharding算法可供选择。本文将为你解决这些问题。


一.  简介


1. 背景


数据库的扩展是一个永恒的话题。对于传统的关系数据库,采用的是纵向扩展(Scale Up)的方式,即买更好的机器添加更多的资源来取得更好的性能(如硬件升级、更快更多的CPU、更大的内存、更多更大的磁盘等)。而形式上采用的是并行数据库、分布式数据库的模式,具体细节依赖水平分区或者垂直分区的技术。关系数据库通过ScaleUp方式已在传统的企业应用环境中统治了将近三十多年。


但是近年来随着数据量的暴增尤其是云计算模式的出现,这种扩展模式对于某些应用已经不太适合,这时便出现了横向扩展(Scale Out)模式。这种方式采用一些Ad-hoc的技术,比如说对数据库进行主从配置(Master-Slave)、采用数据库复制(Replication)技术以及服务器的缓存(Server Cache)等,来将负载分布到多个物理节点上去。另外sharding技术也逐步发展,并在近年来吸引了众人的眼球。
2. 什么是Sharding

Sharding 是把数据库Scale Out到多个物理节点上的一种有效的方式。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻译为分片。

形式上,Sharding可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个shard,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。一个shard可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个shard被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个shard的数据。系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的shard或shards节点上去执行。

3. Sharding与分区的比较

Sharding与分区有着千丝万缕的联系,它们所采取的技术本质上是类似的,可以说sharding的概念就是由分区而来。在某些情况下sharding可能指的就是水平分区。另外有些文档中使用了fragment(也是碎片的意思)的术语(在并行数据库中的这些分区称为partition,在分布式数据库中则称为fragment)。\ref footnote 1

Foot note 1:
[[
Daniel C. Zilio. Physical Database Design Decision Algorithms and ConcurrentReorganization for Parallel Database Systems. PhD thesis 1997.
M. Tamer Özsu, Patrick Valduriez. Principles ofDistributed Database Systems, Third Edition. Springer. 2011
]]

但是我们所说的sharding和分区还是有很大区别的。下面罗列一下:

(1)扩展方式不同。Sharding属于scaleout,而分区则属于scale up方式。
(2)目的不同。分区的目的是为了将一个查询进行并行处理,这样所有的节点能并行处理一个查询;而sharding是让每个节点尽量处理不同的查询。
(3)应用场景:分区适用与传统的企业应用,尤其是OLAP的应用,基本上每个查询都需要访问大部分的数据;而sharding适用于云Web应用,特征是有大量的用户和查询,但是每个查询访问到的元组是非常少的,sharding可以将负载分散到多个物理节点上。
(4)可用性:对于分布式数据库基本上每个查询都需要所有的节点参与,如果某些节点down掉后,系统会大受影响;而sharding所处理的应用一般只涉及到少数几个节点,所以可用性上sharding要好一些。另外分布式数据库需要有一个主节点来生成执行计划并协调相关节点执行等,很容易形成单点瓶颈。
(5)分割粒度:分区一般只针对于一个数据库内部进行分割;而sharding可以以数据库为粒度进行分割,因此可用来构建多租房数据库系统(multi-tenantdatabase)。

4.Sharding的优点

对于Sharding来说,主要有以下主要的优点:

(1)提高了数据库的可扩展性,可以随着应用的增长来增加更多的服务器,只需要将新增加的数据以及负载放到新加的服务器上就可以。
(2)提高了数据库的可用性。其中几个shard服务器down掉之后,并不会使整个系统对外停止服务,而只会影响到需要访问这几个shard服务器上的数据的用户。
(3)小的数据库的查询压力比较小,查询更快,性能更好。
(4)系统有更好的可管理性。对系统的升级和配置可以按照shard一个一个来做,并不会对服务产生大的影响。

http://qing.weibo.com/2294942122/88ca09aa330004tp.html
分享到:
评论

相关推荐

    sharding-proxy实现分表

    接下来我们将深入探讨标题和描述中涉及的“sharding-proxy实现分表”这一主题。 ### 1. 分库分表介绍 分库分表是数据库水平扩展的一种常见策略,用于解决单表数据量过大导致的性能问题。随着业务的增长,数据量...

    Sharding JDBC PPT 分享

    Sharding JDBC是一款开源的轻量级Java框架,它提供了一种分库分表的解决方案,用于解决大规模数据集下的数据库的性能问题。Sharding JDBC具有易于使用,无需额外依赖和强依赖数据库的特点。它允许开发人员对JDBC进行...

    MongoDB Sharding 机制分析

    MongoDB Sharding 机制分析 MongoDB Sharding 机制是 MongoDB 中的一种机制,用于将数据水平切分到不同的物理节点,以解决单机性能极限的问题。Sharding 可以利用上更多的硬件资源来解决单机性能极限的问题,并减小...

    sharding jdbc 基于java代码的配置.zip

    Sharding-JDBC是一款轻量级的Java框架,它旨在解决大数据量下的数据库分库分表问题,无需修改数据库和业务代码,只需要通过配置或者注解就能实现数据的分布式处理。本压缩包“sharding jdbc 基于java代码的配置.zip...

    springboot整合sharding-jdbc完整代码

    SpringBoot整合Sharding-JDBC是将Sharding-JDBC这一分布式数据库中间件与SpringBoot框架结合,以实现数据分片、读写分离等高级数据库管理功能。这个完整的代码示例覆盖了Sharding-JDBC的主要技术点,使开发者可以...

    sharding-jdbc按月分表样例

    【标题】"sharding-jdbc按月分表样例"是一个关于使用Sharding-JDBC进行数据库分片的示例项目,旨在展示如何根据月份动态地将数据分散到不同的表中,以实现数据的水平扩展和负载均衡。Sharding-JDBC是阿里巴巴开源的...

    sharding-sphere4.1.1

    标题"sharding-sphere4.1.1"指的是ShardingSphere的4.1.1版本,这是一个流行的开源项目,专注于数据库分片、分布式事务和数据库治理。ShardingSphere由Apache Software Foundation(ASF)管理,提供了一个全面的...

    shardingJdbc功能代码

    ShardingJDBC是阿里巴巴开源的一款轻量级Java框架,它为数据库分片提供了一种解决方案。这个框架的主要目的是解决在大数据场景下,由于单表数据量过大导致的性能瓶颈问题。ShardingJDBC可以在不改变业务代码的情况下...

    sharding-jdbc-demo

    【标题】"sharding-jdbc-demo" 是一个基于Sharding-JDBC、SpringBoot、MyBatis和Druid的示例项目,旨在展示如何在Java环境中整合这些组件来实现数据库分片和微服务架构。 【描述】这个项目的核心是利用Sharding-...

    springmvc4.3+mysql5.6+shardingjdbc1.4

    《构建高性能分布式数据库系统:基于SpringMVC 4.3、MySQL 5.6与ShardingJDBC 1.4》 在当前的互联网时代,高性能、高可用、可扩展的数据库系统对于企业级应用至关重要。本文将深入探讨如何利用SpringMVC 4.3、MySQL...

    spring-sharding-mybatis

    【标题】"spring-sharding-mybatis" 涉及到的是Spring Boot集成ShardingSphere(原ShardingJDBC)和MyBatis实现数据库分片的解决方案。这是一个在微服务架构中处理大数据量、高并发场景时,提升系统性能的重要技术。...

    当当开源sharding-jdbc-轻量级数据库分库分表中间件

    ### 当当开源Sharding-JDBC:轻量级数据库分库分表中间件 #### 概述 当当网近期开源了一款名为Sharding-JDBC的轻量级数据库分库分表中间件。作为一款高性能、易用性高的数据库水平分片框架,Sharding-JDBC在设计上...

    sharding-jdbc.rar

    《基于Sharding-JDBC的SpringBoot+Mybatis整合实践》 在现代的互联网应用中,随着数据量的急剧增长,数据库的水平扩展成为了一个至关重要的问题。Sharding-JDBC作为一个轻量级的Java框架,提供了数据库分片的功能,...

    sharding-jdbc.zip

    【标题】"sharding-jdbc.zip" 是一个包含Sharding-JDBC相关示例的压缩文件,主要用于演示如何在Java项目中使用Sharding-JDBC进行数据库分片。 【描述】描述指出,这是一个基于Maven构建的Java项目实例,可以在本地...

    demo-example-sharding-jdbc-4.1.1.rar

    【标题】"demo-example-sharding-jdbc-4.1.1.rar" 是一个示例项目,其中包含了使用SpringBoot框架和ShardingJDBC 4.1.1版本进行数据库分表但不分库的实现。这个压缩包旨在展示如何在实际应用中有效地管理和扩展...

    ShardingJDBC5.1.1按月分库分表、读写分离、自动创表完整demo

    《使用ShardingJDBC5.1.1实现按月分库分表、读写分离与自动创表的全面实战》 在现代企业级应用中,数据量的快速增长使得数据库的性能优化成为至关重要的环节。ShardingJDBC作为一款轻量级的Java框架,能够有效地...

    Sharding-JDBC使用案例-分库分表

    Sharding-JDBC是由阿里巴巴开源的轻量级Java框架,它定位为数据库中间件,提供了一种无需修改现有应用代码就能实现数据库分库分表的能力。Sharding-JDBC完全基于JDBC标准,可以理解为一个增强版的数据库驱动,它工作...

    spring+mybatis+sharding-jdbc 整合

    Spring、MyBatis和Sharding-JDBC的整合则提供了一种高效、灵活的解决方案。本篇将详细介绍这个整合过程及其背后的知识点。 首先,让我们了解一下这三个组件的核心功能: 1. Spring:这是一个开源的Java框架,用于...

    Oracle_Sharding 演示视频

    Oracle_Sharding 演示视频 演示如何搭建和测试sharding.

Global site tag (gtag.js) - Google Analytics