近日,微软发布了一份由 Michael Heydt 和 Michael Thomassy 所编写的白皮书,提供了对 SQL Azure 进行分片(Shard)的指南。因为 SQL Azure 目前有每个实例 50GB 的限制,因此无法水平扩展到更大的尺寸,开发者必须要使用该技术才能实现水平分区以进行应用的水平扩展。该白皮书的意图在于提供了一个指南,对数据层需要弹性与流动资源的应用的架构给出了实现方式。
该白皮书提供了:
- 水平分区 / 分片的基本概念
- 模式与最佳实践的概览
- 对什么会代表自身提出了挑战
- ADO.NET sharding library 的高层次设计
- 对 SQL Azure Federations 的介绍
虽然水平分区会根据行来分割一个或多个表,但这通常是在相同的数据库实例中进行的。这么做的好处是减小了索引的尺寸,从理论上来说,这会提升数据的检索速度。与之相反,分片处理相同问题所采取的方式是跨越多个数据库实例对表进行分割,这些数据库可能位于单独的硬件上,需要某种形式的通知和复制才能实现表之间的同步。
在微软的分片模式中,“分片键”用于将数据映射到特定的分片上,后者就是一个数据实体的主键。相关的数据实体会被集群到相关的集合上(根据共享的分片键),这种单元被称为原子单元。原子单元中的所有记录都会存储在相同的分片上。此外,调整分片的过程应该是个离线的过程,因为对物理设施进行修改时还需要对键进行调整。
微软将在 2011 年发布 SQL Azure Federations,它将支持数据库级别的分片。目前,所有的分片功能都是通过 ADO.NET 在应用级别实现的。这与目前已经支持分片功能的 MongoDB、CouchDB 以及 SimpleDB 等“NoSQL”是不同的。
评论