`
songbin0201
  • 浏览: 320233 次
  • 性别: 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 Sphere课堂笔记.zip

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

    Sharding JDBC.xmind

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

    深度解析ShardingJDBC:Java开发者的分库分表利器

    在具体实施中,它支持定义逻辑表、真实表、数据节点、绑定表和广播表等概念,实现复杂的分片和分布策略​​。通过配置application.properties文件,开发者可以指定数据源、表的分布、分片策略及其他参数​​。

    分库分表理论与实战-基于ShardingJDBC5.4.1(资料+视频教程)

    本资源是一套专注于ShardingJDBC 5.4.1的分库分表理论与实践相结合的教程,旨在帮助开发者掌握在高并发、大数据量场景下的数据库优化技术。内容包括数据库分片的基础知识、ShardingJDBC的配置与使用、真实场景下的分...

    ShardingSphere快速开始与核心概念-图灵杨过1

    1. shardingsphere的基本介绍 2. shardingsphere的核心组成 3. shardingsphere的核心概念 4. sharding

    demo-sharding-jdbc:共享jdbc的演示

    sharding-jdbc实现分库分表,可动态配置(需重启) 官网地址 常见问题 表连接(join) 按性能较差分组 如何避免热点数据(哈希/范围/预定义) 根据业务设计好的路由库->路由表 基础概念 基于JDBC封装,工作在客户端...

    Apache ShardingSphere 分布式SQL事务与查询引擎

    项目的核心概念包括:连接(Connect)、增强(Enhance)和插件化(Pluggable)。 连接(Connect):灵活适应数据库协议、SQL方言以及数据库存储方式,可以快速实现应用程序与异构数据库之间的连接。 增强(Enhance...

    mongodb分片.pdf

    分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。

    MongoDB常见18道面试题及答案.docx

    MongoDB是目前最好的面向文档的免费开源NoSQL数据库。...这些MongoDB NoSQL面试问答涵盖了NoSQL数据库基本的概念,复制(Replication),分片(Sharding),事务和锁,跟踪分析工具(Profiler),Nuances和日志等特性。

    systemDesign:演示简单系统设计概念的程序

    系统设计程序先决条件: 节点JS 表达MySQL 雷迪斯Nginx的轴距等这些程序可用于演示系统设计概念的工作。资料来源:

    28个MongoDB经典面试题详解

    这些MongoDB NoSQL面试问答涵盖了NoSQL数据库基本的概念,复制(Replication),分片(Sharding),事务和锁,跟踪分析工具(Profiler),Nuances和日志等特性。 让我们看看下面的这些MongoDB NoSQL数据库的面试问答吧: 1...

    大数据量下,58同城mysql实践

    大数据量下,搞mysql,以下概念需要先达成一致1)单库,不多说了,就是一个库2)分片(sharding),水平拆分,用于解决扩展性问题,按天拆分表3)复制(replication)与分组(group),用于解决可用性问题4)分片+...

    java8源码-somethingnew:各种演示在这里

    学习使用,了解基础概念 spring-boot-starter-skeleton 和 uboost 本意提供一个框架用于像feign,mybatis一样对接口进行自定义的实现与增强。其中具体的逻辑可以自定义。 stn-annotation 基于spring-aop实现的bean...

    阿里云ons使用

     2)一组消息只有唯一一个订阅者处理(sharding)  3)一组消息的数量(即“锁的颗粒度”)越小越好 7、消息重复问题  1)重复原因:网络不可达  2)幂等:某个操作无论重复多少次,结果都一样(不需要解决,...

    consistent-hash:一致的哈希追踪器项目符号

    介绍了一致哈希的概念,并给出了实现它的算法。 一致的哈希指定在服务器之间分配数据的方式,使得无需完全重组数据即可添加或删除服务器。 最初提出将其用于Internet上的Web缓存,以解决客户端可能不了解整个缓存...

    citus:分布式PostgreSQL作为扩展-用于多租户和实时分析工作负载

    :大多数B2B应用程序已经在其数据模型中内置了租户/客户/帐户的概念。 Citus允许您在不更改应用程序的情况下,将事务性关系数据库扩展到100K +个租户。 :Citus可以人工提取大量数据并对该数据运行分析查询。 示例...

Global site tag (gtag.js) - Google Analytics