`
songbin0201
  • 浏览: 323615 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sharding的概念

阅读更多
Sharding定义
  "Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。"Sharding" 姑且称之为"分片"。   Sharding 不是一门新技术,而是一个相对简朴的软件理念。如您所知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。   Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。

事关数据库扩展性
  说起数据库扩展性,这是个非常大的话题。目前的商业数据都有自己的扩展性解决方案,在过去相对来说比较成熟,但是随着互联网的高速发展,不可避免的会带来一些计算模式上的演变,这样很多主流商业系统也难免暴露出一些不足之处。比如 Oracle 的 RAC 是采用共享存储机制,对于I/O 密集型的应用,瓶颈很容易落在存储上,这样的机制决定后续扩容只能是 Scale Up(向上扩展) 类型,对于硬件成本、开发人员的要求、维护成本都相对比较高。   Sharding 基本上是针对开源数据库的扩展性解决方案,很少有听说商业数据库进行 Sharding 的。目前业界的趋势基本上是拥抱Scale Out,逐渐从 Scale Up 中解放出来。

Sharding 的应用场景
  任何技术都是在合适的场合下能发挥应有的作用。 Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM ,每个用户如果抽象成一个数据对象,完全可以独立存储在任何一个地方,数据对象是 Share Nothing 的;再比如 Blog 服务提供商的站点内容,基本为用户生成内容(UGC),完全可以把不同的用户隔离到不同的存储集合,而对用户来说是透明的。   这个"Share Nothing" 是从数据库集群中借用的概念,举例来说,有些类型的数据粒度之间就不是 "Share Nothing" 的,比如类似交易记录的历史表信息,如果一条记录中既包含卖家信息与买家信息,如果随着时间推移,买、卖家会分别与其它用户继续进行交易,这样不可避免的两个买卖家的信息会分布到不同的 Sharding DB 上,而这时如果针对买卖家查询,就会跨越更多的 Sharding ,开销就会比较大。   Sharding 并不是数据库扩展方案的银弹,也有其不适合的场景,比如处理事务型的应用就会非常复杂。对于跨不同DB的事务,很难保证完整性,得不偿失。所以,采用什么样的 Sharding 形式,不是生搬硬套的。   
Sharding与数据库分区(Partition)的区别
  有的时候,Sharding 也被近似等同于水平分区(Horizontal Partitioning),网上很多地方也用水平分区来指代 Sharding,但我个人认为二者之间实际上还是有区别的。的确,Sharding 的思想是从分区的思想而来,但数据库分区基本上是数据对象级别的处理,比如表和索引的分区,每个子数据集上能够有不同的物理存储属性,还是单个数据库范围内的操作,而 Sharding 是能够跨数据库,甚至跨越物理机器的。
分享到:
评论

相关推荐

    杨廷琨 - 从分区到Sharding:数据库核心业务表的分区设计

    1. **Sharding概念**:Sharding是一种数据库分片技术,通过将数据垂直分区到多个独立的数据库中,可以线性扩展数据库的处理能力。Oracle Sharding支持自动部署和数据分区,支持多种分区方式,如HASH、RANGE、LIST等...

    mongodb的sharding

    二、Sharding概念 2.1 分片集群组件 分片集群的组件包括shards、config servers和mongos路由服务器。mongos作为客户端和shards之间的中介,负责分发客户端请求到对应的shard。 2.2 分片集群架构 分片集群架构分为...

    Sharding中文文档.pdf

    该文档是 ShardingSphere 的中文文档,提供了详细的功能介绍、快速入门指南和概念解释。 数据分片 数据分片是 ShardingSphere 的核心功能之一,用于将大规模数据分配到多个数据库中,以提高数据存储和访问效率。...

    simple-sharding, A simple database shard middleware.zip

    本篇文章将深入探讨simple-sharding的核心概念、工作原理以及如何在项目中进行集成和应用。 首先,我们来理解一下什么是数据库分片。数据库分片是将一个大型数据库拆分为多个较小的部分,这些部分称为“分片”,每...

    Sharding Sphere课堂笔记.zip

    一、基本概念 1、什么是 Sharding Sphere 2、什么是分库分表 (1)水平切分和垂直切分 二、Sharding-JDBC 1、什么是 Sharding-JDBC 2、使用 Sharding-JDBC 水平切分 3、使用 Sharding-JDBC 垂直切分 4、使用 ...

    数据库Sharding

    #### 一、基本概念与重要性 **数据库Sharding**,又称数据库分片,是一种在大型、高并发的系统中优化数据库性能和扩展性的技术手段。其核心思想在于将单一数据库的数据分割并分布到多个数据库(服务器)上,以此来...

    sharding-jdbc按月分表样例2

    首先,了解Sharding-JDBC的核心概念。它主要提供了数据分片、读写分离和分布式事务等功能,无需修改现有业务代码,即可适配到现有的JDBC接口上。这使得它能无缝地融入到已有的Java项目中。 1. **分库分表策略**:...

    Sharding-JDBC实现读写分离demo

    首先,我们需要了解读写分离的基本概念。在高并发的Web应用中,为了保证数据的一致性和服务的稳定性,通常会将数据库分为读库和写库,写操作(如插入、更新、删除)集中在主库(写库)上,读操作则分散到多个从库...

    轻量级当当数据库中间件Sharding-JDBC深度解析

    在了解Sharding-JDBC之前,我们需要明确一些基本概念和数据库领域面临的问题。传统的数据库管理系统(RDBMS)如MySQL、Oracle等,拥有成熟的事务支持(ACID:原子性、一致性、隔离性、持久性),但它们在水平扩展性...

    sharding-jdbc数据分片

    **数据分片基本概念** 数据分片是一种分布式数据库技术,将一个大的数据库拆分成多个小的、独立的数据库,每个部分称为一个“分片”。分片的关键在于如何根据业务逻辑和数据分布策略,将数据均匀地分配到各个分片上...

    sharding-jdbc开源分表框架整合mybatis-demo

    这通常涉及到数据库水平扩展、数据分布以及事务管理等核心概念。 描述中提到,这是一个演示项目,包含了创建表的SQL脚本,可以直接导入到数据库中运行,这意味着用户可以快速地理解并实践`sharding-jdbc`的配置和...

    Sharding-JDBC分布式事务应用

    Sharding-JDBC在实现分布式事务时,还提供了柔性事务的概念,如最终一致性事务,它牺牲了事务的强一致性,换取系统的高可用性和性能。在某些场景下,例如订单支付,可以接受短暂的数据不一致,而后通过消息队列或...

    sharding-db按月分表分库

    首先,我们需要理解“分库分表”的概念。当单个数据库无法承受大量的数据存储和查询压力时,我们可以将数据分散到多个数据库或表中,以达到水平扩展的目的。分库是将数据分布在不同的数据库中,分表则是将一个大表...

    sharding-jdbc

    1. **分库分表概念**: 分库分表是应对海量数据的一种常见策略,即将一个大的数据库拆分成多个小的数据库(分库),并将单个大表进一步分割成多个小表(分表),以此来提高数据处理能力和并发性能。Sharding-JDBC ...

    Sharding JDBC.xmind

    官方网站:http://shardingsphere.apache.org/index_zh.html 该思维导图主要是对Sharding JDBC的实现原理进行了整理,包括ShardingJDBC的架构、核心概念、内核剖析等,也是从官方学习的,直接看官方其实就可以了。

    Sharding JDBC 实现数据分片 - 技术分享.pdf

    ShardingJDBC的核心概念包括逻辑表、真实表、数据节点、数据分片、分片键、分片算法和分片策略。逻辑表指的是分片的数据库(或表)的逻辑表示,也就是在分片前,逻辑上整体的数据库或表。真实表是指分片后,在分片...

    sharding-jdbc之——分库分表实例完整源码.zip

    **sharding-jdbc核心概念与功能** sharding-jdbc作为一个轻量级的Java框架,可以在不改变原有业务代码和数据库结构的前提下,通过在JDBC层提供透明化的数据分片能力。其主要功能包括: 1. **分库分表**:根据预...

    应对sharding-jdbc结合mybatis实现分库分表功能 分表的联合查询采用将mysql的数据同步到elasticsearch进行筛选

    标题中的“应对sharding-jdbc结合mybatis实现分库分表功能”涉及到以下几个核心概念: 1. **Sharding-JDBC**:Sharding-JDBC提供了一种透明化的数据库分片解决方案,它作为一个JDBC的驱动,使得应用程序无须修改...

    ShardingJDBC-Demo

    首先,我们来了解ShardingJDBC的核心概念。ShardingJDBC提供了一种透明化的数据分片策略,它通过JDBC接口对上层应用完全透明,使得应用无需关心数据分片的细节,只需像操作单个数据库一样操作分布式数据库。在5.0.0...

    数据库+分库分表+sharding-jdbc

    1. 数据库分库分表概念: 分库是指将一个大型数据库拆分成多个小型数据库,每个小型数据库负责一部分数据存储,以减少单个数据库的压力。分表则是将一张大表按照一定的规则(如范围、哈希等)拆分成多张小表,分散...

Global site tag (gtag.js) - Google Analytics