Azure 表服务与 ADO.NET 数据服务详解
1. Azure 表服务特性
在论坛、书籍和博客中,常能看到一些“专家”建议对数据进行非规范化处理以提升性能,但鲜有人解释其原理。实际上,不同表的数据通常存储在磁盘的不同文件中,甚至不同机器上。规范化操作涉及数据库连接,需要将多个表加载到内存,这会从多个位置读取数据,从而影响性能。而 Azure 表服务默认采用非规范化数据存储,这是其性能良好的原因之一。
若能接受短时间的数据不一致,可采用异步写入或把写入操作移至工作进程。像 Flickr 等主要的 Web 2.0 网站,会经常运行工具检查并修复数据一致性问题。
Azure 表服务还有以下特性:
-无架构:固定架构虽能像安全网一样,提前捕获代码中数据类型不匹配的错误,但处理半结构化数据时会受限。更改表结构添加或修改列很困难,甚至有时无法实现。Azure 表没有架构,同一表中的实体可以有完全不同的属性或不同数量的属性,这就需要开发者确保更新能反映正确的架构。
-无分布式事务:习惯使用事务来维护数据一致性和完整性的人,可能会对没有事务的情况感到担忧。但在分布式存储系统中,跨机器的事务会影响性能。像 Facebook 和 Flickr 等大型服务在扩展时早已摒弃了事务。Azure 表服务虽不支持分布式事务,但支持“实体组事务”,可对同一分区内的实体批量处理请求。
-黑盒特性:以往运行数据库服务时,开发者常需调整其配置。但 Azure 表服务不会提供单独的配置选项,它作为大型分布式系统,会根据数据、工作负载、流量等因素自动调整。开发者