数据库的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.blog.sina.com.cn/tj/88ca09aa330004tp.html
相关推荐
杨廷琨在"从分区到Sharding:数据库核心业务表的分区设计"这一主题中详细探讨了Oracle数据库在不同版本中分区技术的演进、Sharding技术的介绍、分区设计的最佳实践以及分区设计的新特性。接下来,我们将从这些方面...
在实际应用中,Sharding技术可以根据业务需要进行动态调整,例如添加或删除Shard节点,以满足不断增长的业务需求。同时,Sharding技术也可以与其他Mongodb技术结合使用,如复制和MapReduce,以实现更加复杂的数据...
在实际应用中,采用Sharding技术的分布式非结构化数据库系统,对于I/O密集型应用而言,可以有效地缓解存储端的瓶颈问题,避免单纯依赖增加存储硬件容量来解决问题,进而减少硬件成本、降低维护成本,并对开发人员的...
数据分区是sharding技术的核心,MongoDB提供了两种数据分区方式:基于范围的分片(Range Based Sharding)和基于哈希的分片(Hash Based Sharding)。 - Range Based Sharding:根据指定字段的值范围来将数据分散到...
分布式系统的一个关键问题是如何实现高效的数据分割和分布式存储,Sharding技术正是解决这一问题的方案之一。 MongoDB是一种NoSQL数据库,它是一个面向文档的数据库管理系统。MongoDB支持高性能、高可用性和易扩展...
文档控制表格和变更记录部分是项目管理中的标准格式,用于跟踪文档的版本更新和审批流程,这在技术文档中常见,但不包含具体的技术知识点。接下来我们将深入探讨标题和描述中涉及的“sharding-proxy实现分表”这一...
最初,Google的索引是每月构建一次,通过sharding技术将索引分散到多台Index Server,网页数据则存储在Doc Server上。用户搜索时,前端服务器将请求发送给Index Server获取评分后的倒排索引,再从Doc Server提取相关...
根据提供的文件信息,我们可以提炼出以下IT知识点: 1. Oracle 12.2 Sharded Database ...通过了解和应用Sharding技术,企业可以实现高效的系统扩展、数据隔离、成本控制,并能够在多个区域实现数据的快速访问。
例如,Oracle数据库通过Sharding技术实现了数据的分布式,允许水平扩展至1000个数据分片,每个分片包含特定数据子集,这样可以根据性能和灾备需求自定义数据布局。同时,Sharding支持在线Split和rebalance,降低了因...
这个完整的代码示例覆盖了Sharding-JDBC的主要技术点,使开发者可以快速理解和应用到实际项目中。 **一、Sharding-JDBC介绍** Sharding-JDBC是一款轻量级的Java框架,它以客户端直连数据库的方式,提供透明化的...
总之,MySQL海量数据的存储和访问解决方案主要依赖于Sharding技术,通过数据水平切分、路由规则和负载均衡策略,实现数据库的横向扩展,提高系统性能和稳定性。在实际应用中,需结合业务需求和现有技术,选择适合的...
【标题】"sharding-jdbc-demo" 是一个基于...总之,"sharding-jdbc-demo"是一个实用的示例,展示了如何利用现代Java技术和工具实现高效、可扩展的数据库访问,对于理解和实践分布式数据库解决方案具有很高的参考价值。
【标签】"sharding" 指的是数据库分片,这是一种数据库水平扩展的技术,通过将大数据分布到多个物理数据库上,从而提高查询速度和并发处理能力,避免单个数据库成为系统的瓶颈。 以下是关于Spring Boot、...
在【标签】"sharding-jdbc shariding-jd"中,虽然"sharinding-jd"可能是"sharding-jdbc"的拼写错误,但它们都指向了同一个技术——Sharding-JDBC。这个标签突出了这个示例主要关注的点。 【压缩包子文件的文件名称...
8. **社区支持**: 作为Apache项目,ShardingSphere有活跃的社区和丰富的文档资源,用户遇到问题时可以获取及时的技术支持和解答。 9. **版本更新**: 4.1.1相较于早期版本,可能引入了新的特性和优化,比如性能提升...
【标签】"sharding jdbc sharding"进一步强调了项目的核心技术,即ShardingJDBC和数据库分片。数据库分片是一种数据库扩展策略,通过将数据分布到多个物理节点上来提高系统性能和可扩展性。ShardingJDBC提供了透明化...
ShardingJDBC是一种轻量级Java框架,它提供了一种基于jar包的服务,用于实现数据库的自动分库分表,也就是数据分片。数据分片是一种数据库架构模式,它将一个数据库分成多个小的、更易管理、可扩展的部分。随着业务...
【标签】"sharding jdbc sharing" 指出主要涉及的技术是Sharding-JDBC,它是一个轻量级的数据库分片中间件,旨在解决大数据量场景下的数据库扩展问题。"jdbc"代表Java Database Connectivity,表明这个库是用于Java...
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库...
**分库分表技术在大数据量下的必要性** 在当今互联网时代,随着用户数量和业务规模的持续增长,单个数据库往往无法承受巨大的数据压力,性能瓶颈、读写延迟等问题频繁出现。为了解决这些问题,分库分表技术应运而生...