翻译自 Michal Toiba 的博客
微软前不久宣布推出分布式关系数据库 Azure Cosmos DB for PostgreSQL,使 Azure 成为第一个在单一数据库服务中同时支持关系和 NoSQL(非关系)数据的云平台。这意味着 Azure Cosmos DB 开发者在构建云原生应用时拥有极大的灵活性——使用 Azure Cosmos DB 自己的 NoSQL 数据库以及其他数据库(比如 MongoDB 和 Apache Cassandra),或者使用越来越流行的 PostgreSQL 工具和扩展来处理关系数据。那么问题来了,您如何为自己的应用选择数据库?本文将通过探讨开发者在构建应用时应考虑的一些主要因素来深入探讨。
按照传统来讲,答案很简单:如果开发者需要大规模实现高吞吐量,或非常大的数据库,或两者都需要,那么他们会选择 NoSQL 数据库。由于关系数据库一般只会向上扩展,不会向外扩展,因此会达到一个极限,并且一旦超过这个极限就无法处理更多的请求或数据。因此,开发者会普遍选择 NoSQL 数据库进行水平扩展。而如果开发者需要应用的 ACID 合规性和数据准确性,他们则会选择关系数据库。
随着 Azure Cosmos DB for PostgreSQL 等分布式关系数据库的推出,现在可以两全其美了——开发者可以享受 NoSQL 数据库的横向扩展能力、灵活性和性能,以及关系数据库的 ACID 合规性和丰富的 SQL 查询。
决定使用哪个数据库时要考虑的因素
何时使用哪个数据库系统通常取决于用例和各种考虑因素,例如数据库结构、并发性、查询、可扩展性和迁移等等。
请注意,没有开发者的工作负载会只属于上表中的某一个类别,需要根据实际情况进行权衡。我们将在下面查看其中的一些注意事项。
▍数据库结构
如果您的数据是半结构化或非结构化的,并且工作负载需要大规模可预测的延迟,那么您应该考虑使用 NoSQL 数据库。例如,随着客户群的增长,需要快速响应时间和可预测的低延迟的个性化或推荐引擎。NoSQL 数据库可以大规模处理来自各种来源的不同类型的数据,并为持续创新和改善客户体验提供高度的灵活性。
如果您的数据是结构化的、具有固定的架构,并且您的工作负载需要事务一致性,那么关系数据库是一个不错的选择。例如,金融应用程序具有高度结构化的数据并且需要数据完整性。关系数据库提供了在保持 ACID 属性的同时快速扩展的能力。
▍并发
如果您的工作负载是动态的、不可预测的并且可以访问大量数据,例如物联网和设备传感器应用程序,请考虑使用 NoSQL 数据库。NoSQL 数据库非常适合这些类型的应用程序,因为它们发送大量数据并且通常全天候运行。这些应用受益于 NoSQL 数据库的即时可扩展性和弹性,这是处理写入密集型数据摄取所必需的。对于存储设备读出的系统,您可能不需要 ACID 保证,但需要从不同设备写入数据库的写入乘法性能。例如,每 5 分钟读取一次温度的智能温度计。假设你有一千个温度计,但只有几百个用户在看它们,意味着你的写入比读取多得多,这使得 NoSQL 数据库成为理想选择。
另一方面,假设您的写入次数较少,读取次数较多,比如在社交媒体应用中,某个受欢迎的人正在发布内容。如果您可以将查询分为只读查询和写入查询,在关系数据库中可能会更容易,其中写入可以由一台机器处理,然后您可以无限制地扩展读取并且不会丢失 ACID 特性。因此,如果您的工作负载量是每秒数千个事务,例如每秒更新数千次和每秒读取数万次的社交媒体应用,那么关系数据库可能是个不错的选择,具有可扩展副本的集群可以支持这一点。
▍查询
NoSQL 数据库非常适合数据关系可以去规范化和具体化的应用程序。通过去规范化,需要更少的表连接,可以更快地执行查询和检索数据,这使得 NoSQL 数据库成为需要实时分析和具有大数据集的工作负载(例如欺诈检测应用程序)的强大选择。NoSQL 数据库与模式无关,开发者可以灵活地利用来自多个来源的数据并实时检测异常。
规范化和定义的约束有助于加强数据完整性和安全性,并避免数据重复。关系数据库非常适合这些类型的应用程序,因为它们基于不同数据项之间的关系,能够进行复杂的查询和数据分析。
▍可扩展性
如果您的工作负载需要高可用性并且具有需要低延迟数据访问的地理分布用户,可以考虑使用 NoSQL 数据库。例如,NoSQL 系统非常适合具有庞大且不断增长的目录和库存的在线零售/电子商务应用程序。
正如本文开头提到的,分布式关系数据库或分布式 SQL 数据库是一类新兴的数据库系统,它结合了 NoSQL 系统的横向扩展特性和关系数据库的 ACID 特性。在 Azure Cosmos DB 中,分布式 PostgreSQL 支持允许企业处理大量数据并扩展操作工作负载,以在机器上的集群上执行,完全符合 ACID 标准。
可以受益于分布式 PostgreSQL 功能的一组应用程序是多租户 SaaS。正在构建多租户应用程序的数字原住民可以将 Postgres 扩展到数百万租户,而无需重新构建他们的应用程序。他们可以受益于具有高可用性的租户隔离等功能,随着应用程序的增长优化成本和性能。