您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

SQL还是NoSQL?架构师必备选型技能

时间:2023-09-27 12:28:36  来源:微信公众号  作者:阿丸笔记

SQL还是NoSQL?架构师必备选型技能

做一个新业务,我该选择SQL还是NoSQL?

很多时候我们都会有这样的疑问。

如果这时候直接去看MySQL、Mongo、HBase、redis等数据库的用法、特点、区别,其实有点太着急了。

这时候,最好从「数据模型」开始讨论。

1、SQL vs NoSQL

现在最著名的数据模型应该是SQL,它基于Edgar Codd在1970年提出的关系模型:

数据被组织成关系(relations),在SQL中称为表(table),其中每个关系都是元组(tuples)的无序集合(在SQL中称为行)。

那什么是NoSQL?

现在很多非关系型数据库会被称为NoSQL,其含义往往被解释 “Not only SQL”。

采用NoSQL的驱动因素在于:

  • 数据量。 比SQL更好的扩展性需求,包括支持超大数据集或超高写入吞吐量
  • 查询方式。 关系模型不能很好支持的一些特定查询操作
  • 动态扩展。 对关系模式的一些限制表示沮丧,需要更加具有动态和表达力的数据模型

2、数据模型的差异

SQL 和 NoSQL数据库的差异有很多,包括容错性和并发处理,我们这里暂时只讨论数据模型的差异。

关系型模型的主要优势在于:

  • 联结操作
  • 多对一和多对多关系更简洁的表达

注意,简单的多对多适合关系型模型,复杂的多对多更适合图模型

我们以文档型NoSQL为例,它和SQL对比的核心优势在于:

  • 模式灵活性
  • 局部性带来的性能优势

(1)模式灵活性

「模式灵活性」的特点,往往被称为「schema-fress模式」,但是我们并不能将它直接理解为“无模式”。

因为我们在读取数据时,往往存在某种数据结构的隐式转换,所以我们称之为「读时模式」更准确(数据结构是隐式的,只有读取时才解释)。

而传统关系型数据库,对应可以称之为「写时模式」(模式是显示的,并且在写入数据库时被约束必须遵守)。

这两者差异跟编程语言中的动态检查(运行时)和静态检查(编译时)比较类似。

「模式灵活性」的优点在于:

  • 避免了大表变更时的停机或者耗时
  • 支持包含多种类似数据结构
  • 可以随时改变数据结构

「模式灵活性」带来的损害则是需要应用层做好结构约束,并且保证对历史数据的兼容性。
一般典型关系型场景,「模式灵活性」反而会导致难以维护。

(2)局部性的性能优势

注意注意,局部性优势仅适用于需要同时访问文档中大部分数据的场景。

如果我们的查询需要访问整个文档,那么存储局部性具备显著的性能优势。

此时,如果数据被划分到了多个表中,则需要访问多个表来检索数据,会浪费更多的磁盘IO并花费更多的时间。

如果我们的访问只需要文档中的一小部分数据,那么对于大型文档来说就是一种浪费。

3、数据模型分析原则

对于一份数据存储,「数据模型」的建立, 就是考虑应该通过 SQL 还是 NoSQL 进行 数据组织 。

那么,结合前面对SQL和NoSQL的介绍与对比,我们总结了以下几个维度,来具体考虑如何建立「数据模型」。

(1)数据对象关系

多对一或者多对多,一般考虑SQL。

一对多的关系,可以考虑SQL或者NoSQL。

(2)查询性能

如果我们的查询通常需要访问整个文档,那么存储局部性具备显著的性能优势,关系型的join性能较差,因此可以考虑NoSQL。

(业务上,一般会通过整体结果缓存,对关系型join查询加速)

如果通常是局部数据对象、独立实体查询,考虑SQL。

(3)写入吞吐量

如果需要超高的写入吞吐量,考虑NoSQL。

(4)扩展性

  • 属性扩展:如果对象属性不确定,且经常变动,NoSQL更灵活。
  • 超大数据集扩展:NoSQL通常更好。
  • 单value大小:单value如果过大,可能导致数据库写入失败。考虑拆分对象,或者分级存储到对象存储。一般单value不要超过100KB(压缩后)。

(5)延迟选择数据库类型

数据模型分析主要是根据业务场景区分 关系型 还是 非关系型。

延迟考虑具体数据库选型,用RDS还是Mongo还是其他数据库,它们之间的功能性差异在逐渐变少。

具体选择可以结合 研发人员熟悉程度、数据规模、其他非功能性需求 来判断。

一些例子:

  • Mongo 4.x支持事务
  • MySQL 8.0支持JSON格式
  • DB-engine上,mysql和mongo都从本身定位逐步扩展为multi-model

SQL还是NoSQL?架构师必备选型技能

SQL还是NoSQL?架构师必备选型技能



Tags:架构师   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
有了LLM,所有程序员都将转变为架构师?
编译 | 言征 出品 | 51CTO技术栈(微信号:blog51cto)生成式人工智能是否会取代人类程序员?可能不会。但使用生成式人工智能的人类可能会,可惜的是,现在还不是时候。目前,我们正在见...【详细内容】
2024-03-07  Search: 架构师  点击:(19)  评论:(0)  加入收藏
了解“自然语言处理架构师”的最新考试流程、条件,以及就业前景
随着人工智能技术的飞速发展,自然语言处理(NLP)已成为当今科技领域的热点之一。自然语言处理架构师作为这一领域中的专业人才,更是备受关注。那么,如何成为一名自然语言处理架构...【详细内容】
2024-01-04  Search: 架构师  点击:(51)  评论:(0)  加入收藏
Java架构师
架构师不仅是技术的实践者,还是技术的哲学家。他们需要对不同技术有深入的了解,同时还要知道何时以及如何将这些技术融合到一个完整的系统中。这需要在技术选择时权衡各种因素...【详细内容】
2024-01-04  Search: 架构师  点击:(82)  评论:(0)  加入收藏
Java架构师十项全能
在当今的软件开发领域,Java作为一种流行的编程语言,已经得到了广泛的应用。作为一名Java架构师,需要具备多方面的技能和经验,以便为企业的软件开发项目提供支持。本文将探讨Java...【详细内容】
2023-12-05  Search: 架构师  点击:(232)  评论:(0)  加入收藏
制慧权:AI时代催生问题架构师
看了open AI的开发者大会之后被惊到了,可能不止我一个吧。AI它之所以恐怖的地方,就是因为它是一个自然语言模型,它不再是机器语言了。所以,你不需要学编程。而这次open AI的开发...【详细内容】
2023-11-13  Search: 架构师  点击:(167)  评论:(0)  加入收藏
架构师之路——模块类的设计与实现
在软件开发中,构建模块化、可扩展和易维护的应用程序是每位架构师的目标。本文将介绍如何设计和实现一个模块类来构建一个模块化编程框架,以便更好地管理和扩展应用程序功能。...【详细内容】
2023-10-20  Search: 架构师  点击:(22)  评论:(0)  加入收藏
架构师必备的37项技能清单
几年前,我被问到“你是如何变成一名架构师的?”。基于这个话题,我们讨论了很多,比如必要的技术、经验以及所需要的知识储备等。这一次讨论促使我开始思考要成为一名架构师应该具...【详细内容】
2023-10-17  Search: 架构师  点击:(254)  评论:(0)  加入收藏
SQL还是NoSQL?架构师必备选型技能
做一个新业务,我该选择SQL还是NoSQL?很多时候我们都会有这样的疑问。如果这时候直接去看MySQL、Mongo、HBase、Redis等数据库的用法、特点、区别,其实有点太着急了。这时候,最...【详细内容】
2023-09-27  Search: 架构师  点击:(317)  评论:(0)  加入收藏
企业架构师常犯的错误:避免这些问题以优化组织效率
对于临时的最终用户、经理或高级管理人员来说,企业架构师的工作是神奇的。无休止的同步、组织和稳定的琐事都由计算机处理,这样人类就可以做他们最擅长的事情,但所有的门户网站...【详细内容】
2023-09-25  Search: 架构师  点击:(239)  评论:(0)  加入收藏
程序员如何成为架构师?
程序员的职业道路通常非常清晰。从初级开发人员开始,要么在前端或后端之间进行选择,要么来回移动以获得完整的堆栈。然后是:高级开发人员、首席开发人员或技术架构师,然后是团队...【详细内容】
2023-07-07  Search: 架构师  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(9)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条