你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
用于选择数据存储的条件
本文介绍了在评估数据存储时使用的比较条件。 其目标是帮助你确定哪些数据存储类型可以满足你的解决方案的要求。
一般注意事项
在做出选择时,请记住以下注意事项。
功能要求
- 数据格式:打算存储什么类型的数据? 常见类型包括事务数据、JSON 对象、遥测、搜索索引或平面文件。
- 数据大小:需要存储的实体有多大? 这些实体是需要保持为单个文档,还是可以将它们拆分到多个文档、表和集合中?
- 缩放和结构:整体需要多少存储容量? 是否预期对数据进行分区?
- 数据关系:数据是否需要支持一对多或多对多关系? 关系本身是否是数据的重要部分? 是否需要联接或组合来自同一数据集或来自外部数据集的数据?
- 一致性模型:确保在一个节点中所做更新出现在其他节点中后才能做进一步更改有多重要? 是否可以接受最终一致性? 是否需要针对事务实现 ACID 保证?
- 架构灵活度:将向数据应用什么类型的架构? 将使用固定架构、写入时架构方法还是读取时架构方法?
- 并发:在更新和同步数据时希望使用什么类型的并发机制? 应用程序是否将执行可能会冲突的许多更新? 如果是,你可能需要实施记录锁定和悲观并发控制。 或者,是否可以支持乐观并发控制? 如果是,采用简单的基于时间戳的并发控制已经足够,还是需要附加的多版本并发控制功能?
- 数据迁移:解决方案是否需要执行 ETL 任务将数据移动到其他存储或数据仓库?
- 数据生命周期:数据是否写入一次读取多次? 是否可以将其移动到冷存储中?
- 其他支持的功能:是否需要任何其他特定功能,例如架构验证、聚合、索引、全文搜索、MapReduce 或其他查询功能?
非功能需求
- 性能和可伸缩性:数据性能需求是什么? 对数据引入速率和数据处理速率是否有特定要求? 在引入数据后,查询和聚合数据时可接受的响应时间是多少? 需要将数据纵向扩展到多大的规模? 工作负荷是读取开销更重还是写入开销更重?
- 可靠性:整体上需要支持多高的服务级别协议? 需要为数据使用者提供什么级别的容错? 需要什么类型的备份和还原功能?
- 复制:数据是否需要分布在多个副本或区域中? 需要什么类型的数据复制功能?
- 限制:特定数据存储的限制是否可以支持你对规模、连接数和吞吐量的要求?
管理和成本
- 托管服务:如果可能,请使用托管数据服务,除非你需要只有基础结构即服务 (IaaS) 托管数据存储中才提供的特定功能。
- 区域可用性:对于托管服务,服务是否在所有 Azure 区域中都可用? 解决方案是否需要托管在特定的 Azure 区域中?
- 可移植性:是否需要将数据迁移到本地、外部数据中心或其他云托管环境?
- 许可:在专有许可证类型与 OSS 许可证类型之间,你是否有偏好? 对于可以使用哪些类型的许可证,是否有任何其他外部限制?
- 整体成本:在你的解决方案内使用此服务的总体成本是多少? 需要运行多少个实例来支持运行时间和吞吐量要求? 在此计算中,请考虑运营成本。 首选使用托管服务的一个原因是降低了运营成本。
- 成本效益:是否可以对数据进行分区以便经济高效地存储数据? 例如,是否可以将大型对象从昂贵的关系数据库移动到对象存储中?
安全性
- 安全性:需要哪种类型的加密? 是否需要静态加密? 希望使用哪种身份验证机制来连接到数据?
- 审核:需要生成哪种类型的审核日志?
- 网络需求:是否需要限制或管理从其他网络资源对数据的访问? 是否要求只能从 Azure 环境内访问数据? 是否要求可以从特定的 IP 地址或子网访问数据? 是否要求可以从在本地或其他外部数据中心内托管的应用程序或服务访问数据?
DevOps
- 技能组合:是否有你的团队特别善于使用的特定编程语言、操作系统或其他技术? 是否有你的团队难以使用的其他技术?
- 客户端 对于你的开发语言是否有良好的客户端支持?