如何为自己的应用选择数据库?有这些考虑因素

news2024/11/28 11:48:39

节选翻译自 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 扩展到数百万租户,而无需重新构建他们的应用程序。他们可以受益于具有高可用性的租户隔离等功能,随着应用程序的增长优化成本和性能。

了解 Azure Cosmos DB 的 NoSQL 和关系功能的更多信息,点我查看我们的官方文档~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

只需三步,完成ChatGPT微信机器人搭建

大家好,我是可乐。 这两天 Chatgpt 又爆火了,去年12月份刚出来的时候,我写了两篇文章: ①、如何注册Chatgpt? ②、如何将 chatgpt接入微信? 然后沉寂了一个月,没想现在到又火了。本篇文章我…

计算机组成与体系结构 性能设计 William Stallings 第2章 性能问题

2.1 优化性能设计例如,当前需要微处理器强大功能的桌面应用程序包括:图像处理、三维渲染、语音识别、视频会议、多媒体创作、文件的声音和视频注释、仿真建模从计算机组成与体系结构的角度来看,一方面,现代计算机的基本组成与50多…

强大的ChatGpt为企业营销推广提供了全方位的加持

chatgpt,一个火出圈的“聊天机器人”。从写作文,到写代码,似乎没有什么是它干不了的。 ChatGpt在工业中的应用场景有哪些? 在工业领域,它可以用于提高生产效率,缩短生产周期,并帮助工人解决生产过程中的问…

优先级队列(PriorityQueue 和 Top-K问题)

一、PriorityQueue java中提供了两种优先级队列:PriorityQueue 和 PriorityBlockingQueue。其中 PriorityQueue 是线程不安全的,PriorityBolckingQueue 是线程安全的。 PriorityQueue 使用的是堆,且默认情况下是小堆——每次获取到的元素都是…

LeetCode刷题------字符串

LeetCode:344.反转字符串 定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。 var reverseString function(s) {let l -1, r s.len…

Windows下LuaBridge2.8的环境配置及简单应用

Windows下LuaBridge2.8的环境配置及简单应用 LuaBridge2.8下载链接: https://github.com/vinniefalco/LuaBridge/tags 关于Lua的环境配置可参考以下链接(这里不做简述): https://ufgnix0802.blog.csdn.net/article/details/125341…

什么是抗压能力?抗压能力的重要性及提高方法

在现实生活中每个人都面临着或大或小的压力。不论是学习还是工作,没有压力就没有进步和提升,压力可以转化为动力,而扛不住压力那就会导致躺平的结果。在职业的道路上,压力一直都存在,尤其是站在企业人力资源管理的角度…

开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试

开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试如何组织一场微信线上答题考试在线考试是一种非常节约成本的考试方式,考生通过微信扫码即可参加培训考试,不受时间、空间的限制,近几年越来越受企事业单位以及…

Navicat远程连接mysql教程及Navicat报错10061解决办法

文章目录想要远程连接的前提是数据库要配置密码,配置密码参考如下进入要连接的数据库看一下原有的配置,host 和 user修改配置授权root用户进行远程登录配置修改完成后,打开navicat,新建连接点击测试链接,显示连接后点击…

10个自动化测试框架,测试工程师用起来

软件行业正迈向自主、快速、高效的未来。为了跟上这个高速前进的生态系统的步伐,必须加快应用程序的交付时间,但不能以牺牲质量为代价。快速实现质量是必要的,因此质量保证得到了很多关注。为了满足卓越的质量和更快的上市时间的需求&#xf…

ThinkPad笔记本如何拆卸及安装电池

注意:外置电池可以自行拆卸,内置电池如需拆卸建议联系服务商,由工程师协助操作。 外置电池的拆卸方法: 方式一.部分机型只有一个锁扣,将锁扣移动到解锁状态,然后将电池向机身外侧抽出(以T420为例&#xf…

用Qt开发的ffmpeg流媒体播放器,支持截图、录像,支持音视频播放,支持本地文件播放、网络流播放

前言 本工程qt用的版本是5.8-32位,ffmpeg用的版本是较新的5.1版本。它支持TCP或UDP方式拉取实时流,实时流我采用的是监控摄像头的RTSP流。音频播放采用的是QAudioOutput,视频经ffmpeg解码并由YUV转RGB后是在QOpenGLWidget下进行渲染显示。本…

如何使用ModelScope训练自有的远场语音唤醒模型?

就像人和人交流时先会喊对方的名字一样,关键词就好比智能设备的"名字",而关键词检测模块则相当于交互流程的触发开关。 本文介绍魔搭社区中远场语音增强与唤醒一体化的语音唤醒模型的构成、体验方式,以及如何基于开发者自有数据进…

MySQL数据库07——高级条件查询

前面一章介绍了基础的一个条件的查询,如果多条件,涉及到逻辑运算,and or 之类的。就是高级一点的条件查询。本章来介绍复杂的条件搜索表达式。 AND运算符 AND运算符只有当两边操作数均为True时,最后结果才为True。人们使用AND描述…

高性能IO模型:为什么单线程Redis能那么快?

我们通常说Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的。这也是Redis对外提供键值存储服务的主要流程。 但redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。 Redis为什么用单线…

探讨MySQL事务特性和实现原理

一、概念 事务 一般指的是逻辑上的一组操作,或者作为单个逻辑单元执行的一系列操作,一个事务中的所有操作会被封装成一个不可分割的执行单元,这个单元的所有操作要么全部执行成功,要么全部执行失败,只要其中任意一个操…

《Terraform 101 从入门到实践》 第四章 States状态管理

《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。 军书十二卷,卷卷有爷名。 为什么需要状态管理 Terraform的主要作用是管理云平台上的资源&#xff…

个人学习系列 - 解决拦截器操作请求参数后台无法获取

由于项目需要使用拦截器对请求参数进行操作,可是请求流只能操作一次,导致后面方法不能再获取流了。 新建SpringBoot项目 1. 新建拦截器WebConfig.java /*** date: 2023/2/6 11:21* author: zhouzhaodong* description:*/ Configuration public class W…

Docker-consul的容器服务更新与发现

一.Consul概述1.1 什么是服务注册与发现服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起…

Threejs中的Shadow Mapping(阴影贴图)

简而言之,步骤如下: 1.从灯光位置视点(阴影相机)创建深度图。 2.从相机的位置角度进行屏幕渲染,在每个像素点,比较由阴影相机的MVP矩阵计算的深度值和深度图的值的大小,如果深度图值小的话&…