什么是sharding

📅 2026/7/3 18:42:55
什么是sharding
MySQL Cluster 是一种技术该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构系统能够使用廉价的硬件而且对软硬件无特殊要求。此外由于每个组件有自己的内存和磁盘不存在单点故障。MySQL Cluster 由一组计算机构成每台计算机上均运行着多种进程包括MySQL服务器NDB Cluster 的数据节点管理服务器以及可能专门的数据访问程序。关于 Cluster 中这些组件的关系。如果想做mysql集群可以考虑使用。Plugin for Grails这个没什么可说的基于grails的shards插件。网站是http://grails.org/plugin/shardingRedisredis-sharding 是一个由perl写的 Redis 的proxy使用它你可以将数据分布存储在多个Redis实例上而在操作数据时却像只操作一个实例一样。利用它相当于透明地解决了 Redis 单线程无法有效利用多核心服务器的问题。当然我们更期待官方的cluster方案。项目地址https://github.com/kni/redis-sharding架构/- Redis (node 1) Client 1 --- /-- Redis (node 2) Redis Sharding --- Redis (node 3) Client 2 --- \-- Redis (node 4) \- Redis (node 5)启动redis-sharding分别为使用默认hostport与指定hostport的方式perl redis_sharding.pl --nodes10.1.1.2:6380,10.1.1.3:6380,... perl redis_sharding.pl --port6379 --nodes10.1.1.2:6380,10.1.1.3:6380,... perl redis_sharding.pl --host10.1.1.1 --port6379 --nodes10.1.1.2:6380,10.1.1.3:6380,...redis-sharding还支持重新切分数据但这需要暂时停掉proxy下面是将原来的db 9的数据重新sharding到B1-B5五个实例上停掉redis-sharding后再执行perl resharding.pl --db9 --fromA1 --nodesB1,B2,B3,B4,B5 perl resharding.pl --db9 --fromA2 --nodesB1,B2,B3,B4,B5然后再启动新的管理B1-B5的redis-sharding实例即可perl redis_sharding.pl --nodesB1,B2,B3,B4,B5如果需求简单可以考虑使用。Ruby ActiveRecord功能和hibernate shards类似都是基于orm的shard如果使用ruby的朋友可以使用。ScaleBases Data Traffic ManagerScaleBase 的关键卖点是它的旗舰产品 Data Traffic Manager。其最大的特点是可以跟客户已有的应用协同工作不需要客户重写应用。Data Traffic Manager 的作用相当于在数据库与客户端可以是 app server、BI 工具或任何数据库客户端之间充当代理其部署方式可以是在本地或云端。商用产品不多说前景十分看好。Solr Search Server顾名思意solr提供的服务器分发。在处理搜索的可以深入一下。SQLAlchemy ORMSQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射ORM工具使用MIT许可证发行。SQLAlchemy“采用简单的Python语言为高效和高性能的数据库访问设计实现了完整的企业级持久模型”。SQLAlchemy的理念是SQL数据库的量级和性能重要于对象集合而对象集合的抽象又重要于表和行。因此SQLAlchmey采用了类似于Java里Hibernate的数据映射模型而不是其他ORM框架采用的Active Record模型。不过Elixir和declarative等可选插件可以让用户使用声明语法。如果你正在用python而且想做分表的功能可以重点关注下。SQL Azuremicrosoft的分片方案对于大数据分析高度可扩展的NoSQL数据库是很热门的话题但是组织可以对传统的关系型数据库通过水平行分区进行横向扩展和纵向扩展使它们运行于多个服务器实例上这也就是所谓的分片技术(Sharding)。 SQL Azure是定制版SQL Server 2008 R2集群基于云的实现运行于微软公司全球数据中心网络上。SQL Azure提供了高达99.9%服务级别协议的高可用性由三重数据复制实现省下了为处理运营高峰负载压力需要在服务器硬件上的资本投资。SQL Azure服务是在12月12日发布的该版本把SQL Azure数据库的最大容量从50GB增加到了150GB引入了称之为SQL Azure Federation的分片技术隐性地降低了每月运营成本达到45%到95%之多具体比例依赖于数据库大小。Federations使重新分配和划分数据更容易了而且提供了无需应用停机处理这些操作的路由层。DBA和开发人员如何利用SQL Azure发挥他们的T-SQL管理技能并能够消除按需分配数据库服务器的常规配置和维护成本呢?需要做联邦的数据来源于接近800万行的 Windows Azure表特征数据这些数据来自于六个默认的计数器网络接口每秒发送的字节数和接收的字节数每秒钟ASP.NET应用请求数建立的TCPv4连接数内存可用字节和处理时间百分比。SQL Server 2008 R2 SP1源表(WADPerfCounters)有一个组合的集群主键由PartitionKey和RowKey值组成。SQL Azure目标表做联邦后增加了CounterID值从1到6代表了六个时间计数器。这些表给他们的主键增加了CounterID因为必须包含联邦分发主键值。如果你正在跟微软合作或者考虑使用微软的方案可以选用。IBM InformixIBM的数据库IBM Informix 关系数据库管理系统为所有规模的企业提供了联机事务处理和决策支持应用适用于Microsoft Windows、Linux、UNIX 和 Apple Mac OS X 平台。如果使用这个数据库可以使用它的shard功能。GizzardTwitter已经从以往的数据存储开发经验中提出一个名为Gizzard的Scala框架让用户可以更方便地创建自定义容错、分布式数据库。 Twitter给出了一个名为“Rowz”的示例方便用户上手。Twitter还公布了Gizzard的完整代码。有了Gizzard初创公司和小公司就可以更好更快地处理大量数据从而利用更少的资源满足用户需求。它更像是一个数据shards的方案之一可以不使用关系型数据库。Spock Proxy这也是在实际需求中产生的一个开源项目。Spockhttp://www.spock.com/是一个人员查找的 Web 2.0 网站。通过对自己的单一 DB 进行有效 Sharding化 而产生了Spock Proxy(http://spockproxy.sourceforge.net/ ) 项目Spock Proxy 算得上 MySQL Proxy 的一个分支提供基于范围的 Sharding 机制。Spock 是基于 Rails 的所以Spock Proxy 也是基于 Rails 构建关注 RoR 的朋友不应错过这个项目。架构示意图