架构师备考-非关系型数据库

基础理论

CAP 理论

  • C(Consistency)一致性。一致性是指更新操作成功并返回客户端完成后,所有的节点在同一时间的数据完全一致,与ACID 的 C 完全不同。
  • A (Availability)可用性。可用性是指服务一直可用,而且是正常响应时间
  • P(Partition tolerance)分区容错性。分区容错性是指分布式系统在遇到某节点或网络区分故障的时候,仍然能够对外提供满足一致性和可用性的服务。
  • CA:优先保证一致性和可用性,放弃分区容错性。
    • 缺点:不再是分布式系统
  • CP:优先保证一致性和分区容错性,放弃可用性。
    • 缺点:牺牲用户体验
  • AP:优先保证可用性和分区容错性,放弃一致性。
    • 全局数据的不一致性

BASE 理论

  • 基本可用(Basically Available):指分布式系统在出现不可预知故障的时候,允许牺牲部分可用性。允许分区失败的情形出现
  • 软状态(soft state)
    • 硬状态:数据库状态一直保持数据库一致性
    • 软状态:状态可以有一段时间不同步
  • 最终一致性(Eventuallyconsistent):系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。

NOSQL 特点

        NOSQL 数据库的主要特点包括:易拓展、高性能处理大数据量的数据、灵活的数据模型、高可用

  • 易拓展:去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
  • 大数据量,高性能:NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下。这得益于它的无关系性,数据库的结构简单。
  • 灵活的数据模型:NoSQL 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式
  • 高可用:NoSQL 在不太影响性能的情况下,就可以方便的实现高可用的架构,有些产品通过复制模型也能实现高可用。

NOSQL与SQL 比

特征

SQL 数据库

NOSQL 数据库

数据类型

结构化

非结构化

数据一致性

强一致性

弱一致性

事务

高事务性

弱事务性

拓展性

一般

数据容量

有限数据

海量数据

标准化

技术支持

可维护性

复杂

复杂

NOSQL 体系框架

  • NOSQL 分为 4层,分别是数据持久层、数据分布层、数据逻辑模型层、接口层
  • 数据持久层:定义了数据的存储形式
    • 内存:最快,但可能造成数据丢失
    • 硬盘:保存很久,但存取慢于内存
    • 内存和硬盘接口
    • 定制可插拔:保证了数据存取具有较高的灵活性
  • 数据分布层:定义了数据是如何分布的
    • CAP 支持,可用于水平拓展
    • 多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行
    • 动态部署支持,可以在运行着的集群中动态地添加或删除节点
  • 数据逻辑模型层:数据的逻辑表现形式
  • 接口层:为上层应用提供了方便的数据调用接口
    • Rest:一种软件架构风格,它定义了一组用于分布式系统的架构原则
    • Thrift:一个由Apache开发的跨语言的服务部署框架
    • Map/Reduce:一种编程模型,用于大规模数据集(大规模数据集)的并行运算
    • Get/Put:Get/Put 是一种简单的键值存储操作接口,其中"Get"用于检索数据,"Put"用于存储数据
    • 特定语言API:许多NoSQL数据库为特定编程语言提供了专用的API

NOSQL 适用场景

  • 数据模型比较简单
  • 需要灵活性更强的IT 系统
  • 对数据库性能要求较高
  • 不需要高度的数据一致性
  • 对于给定key,比较容易映射复杂值的环境

NOSQL 数据库分类

        NOSQL 数据库主要分为4类,分别是:键值对数据库、列式存储数据库、文档型数据库、图数据库

键值对数据库

  • 键值存储的典型数据结构一般为数据链表:先通过Hash 算法得出 Hashcode,找到数组的某一个位置,然后插入链表。
  • 这类数据库主要会用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据。
  • Key-Value 模型对于IT 系统来说,其优势在于简单、易部署。但是如果数据库管理员只对部分值进行查询或更新的时候,Key-Value 就显得效率低下了。
  • 典型应用
    • 涉及频繁读写、拥有简单数据模型的应用
    • 内容缓存、比如会话配置文件、参数、购物车等
    • 存储配置和用户信息的移动应用
  • 优点:拓展性好、灵活性好、大量写操作时性能高
  • 缺点:无法存储结构化信息,条件查询效率较低
  • 相关产品:redis、Memcached

列式存储数据库

  • 列式数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列。
  • 这类数据库通常用来应对分布式存储的海量数据。键仍然存在,但是他们的特点是指向了多个列。这些列是由列家族来安排的。
  • 典型应用
    • 数据分析:列式数据库非常适合进行数据分析和数据仓库应用,尤其是涉及大量聚合操作的场景。
    • 大数据处理:用于处理大规模分布式数据集,如日志分析、用户行为分析等。
    • 实时查询:在需要快速响应的实时分析系统中,列式数据库可以提供高效的查询性能。
    • 分布式存储:在需要高可用性和容错能力的分布式系统中,列式数据库因其设计而具有优势。
  • 优点:
    • 查询性能:对于读取大量数据中的少数几列的场景,列式数据库可以显著提高查询性能,因为它只需要读取相关的列而不是整行数据。
    • 压缩率高:由于同一列的数据类型相同,列式数据库通常可以实现更高的数据压缩率,从而减少存储空间和I/O操作。
    • 可扩展性:列式数据库通常设计为分布式系统,易于水平扩展,可以处理不断增长的数据量。
    • 容错性:许多列式数据库支持数据复制和分区,提高了系统的容错能力和可用性。
  • 缺点:
    • 写入性能:由于数据是按列存储的,对于涉及多列的写入操作,列式数据库可能不如行式数据库高效。
    • 事务支持:大多数列式数据库不支持复杂的事务操作,这对于需要强事务一致性的应用来说可能是一个限制。
    • 数据更新:对于频繁的数据更新操作,列式数据库可能不如行式数据库高效,因为更新操作可能需要重写整列数据。
    • 复杂查询:虽然列式数据库在聚合查询方面表现优异,但对于涉及多表连接的复杂查询,其性能可能不如行式数据库。
  • 相关产品:Apache Cassandra、Apache HBase、Google Bigtable

文档型数据库

  • 该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。
  • 典型应用:存储、索引并管理面向文档的数据或者类似的半结构化数据。比如用于后台具有大量读写操作的网站、使用JSON 数据结构的应用、使用嵌套结构等非规范化数据的应用程序
  • 优点:
    • 性能好(高并发)、灵活性高、复杂度低、数据结构灵活
    • 提供嵌入式文档功能,将经常查询的数据存储在同一个文档中。既可以根据键来构建索引,也可以根据内容构建索引
  • 缺点:缺乏统一的查询语法
  • 相关产品:MongoDB、Lucene、Elasticserach

图数据库

  • 图形结构的数据库同其他采用行列以及刚性结构的SQL 数据库不同,它使用灵活的图形模型,并且能够拓展到多个服务器上。
  • NOSQL 没有标准的查询语言,因此进行数据库查询需要指定数据模型。
  • 许多NoSQL 数据库都有REST 式的数据接口或者查询API。适合存储通过图进行建模的数据,列如社交网络数据、生物信息网络数据、交通网络数据等。

  • 典型应用:专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题

  • 优点:灵活性高、支持复杂的图形算法、可用于构建复杂的关系图谱

  • 缺点:复杂度高、只能支持一定的数据规模

  • 相关产品:Neo4J、InfoGrid、Infinite Graph

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

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

相关文章

内网渗透-初探域渗透

文章目录 环境域信息收集系统基本信息网络信息域控主机信息根据ip查主机名用户信息权限提升网络探针系统命令nbtscanfscannishang 凭据收集 域渗透实战凭据收集(重点)mimikatzProcdumpPwdumpSAMInsidekrbtgt用户hash hash破解解决无法获取明文的问题明文口令传递IPC连接atschta…

windows录屏软件工具推荐!!

如今,科技的进步,互联网的普及,使我们的生活越来越便利,录屏工具的出现,大大提高我们的工作效率。如果你经常需要录制屏幕上的内容,比如制作教学视频、游戏实况记录、演示文稿等等,那这几款软件…

【病毒分析】从无解到破解:Mallox家族linux版本的分析以及解密器的制作

1.背景 Mallox勒索软件首次出现于2021年5月,并在2021年10月扩展到中国市场。截至2024年,它仍然活跃。Mallox通过加密受害者文件并要求支付赎金来恢复数据,使用唯一的加密密钥加密文件,受害者的文件通常会添加“.mallox”或“.mal…

【LeetCode每日一题】——862.和至少为 K 的最短子数组

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 前缀和 二【题目难度】 困难 三【题目编号】 862.和至少为 K 的最短子数组 四【题目描述】 …

容器化核心快速入门

概述 物理机:好比是独立的大船,独立发动机,独立船舱。所有资源共用。运水果的同时就不能运鱼( 1964年)虚拟机:相当于把大船进行改造,把大船的资源进行独立的拆分,独立的部分都有单独…

适合自己的才行-这五款项目管理软件工具帮你提高管理效能

凭借多年项目管理经验,我试用过数十款国内外项目管理软件。我认为,操作简便性至关重要,因为软件仅是辅助管理工具,复杂性若影响管理本质,则得不偿失。 在生产管理方面,我专注于新产品从立项到研发的全过程…

【网络原理】HTTPS

目录 前言 为什么要使用HTTPS? HTTPS是如果进行加密的 1.对称加密 2.非对称加密 中间人攻击 3.证书 中间人有没有可能篡改证书? 中间人有没有可能整个调包证书? 前言 在上一篇中,我们讲解了什么是HTTP,但是在…

现代数字信号处理I--最佳线性无偏估计 BLUE 学习笔记

目录 1. 最佳线性无偏估计的由来 2. 简单线性模型下一维参数的BLUE 3. 一般线性模型下一维参数的BLUE 4. 一般线性模型下多维参数的BLUE 4.1 以一维情况说明Rao论文中的结论 4.2 矢量参数是MVUE的本质是矢量参数中的每个一维参数都是MVUE 4.3 一般线性模型多维参数BLUE的…

[简易版] 自动化脚本

前言 uniapp cli项目中没办法自动化打开微信开发者工具,需要手动打开比较繁琐,故此自动化脚本就诞生啦~ 实现 const spawn require("cross-spawn"); const chalk require("picocolors"); const dayjs require("dayjs&quo…

牛客网刷题(1)(java之数据类型、数组的创建(静态/动态初始化)、static关键字与静态属性和方法、常用的servlet包、面向对象程序设计方法优点)

目录 一、Java变量的数据类型。 <1>Java中变量的数据类型。 <2>基本数据类型。 <3>引用数据类型。 二、Java中一维数组的初始化。&#xff08;静态、动态初始化&#xff09; <1>数组。 <2>动态初始化。 <3>静态初始化。 三、看清代码后&am…

Cesium基础-(Entity)-(Billboard)

里边包含Vue、React框架代码 2、Billboard 广告牌 Cesium中的Billboard是一种用于在3D场景中添加图像标签的简单方式。Billboard提供了一种方法来显示定向的2D图像,这些图像通常用于表示简单的标记、符号或图标。以下是对Billboard的详细解读: 1. Billboard的定义和特性 B…

模型训练识别手写数字(一)

一、模型训练数据集 1. 导入所需库 import numpy as np from sklearn.datasets import fetch_openmlnumpy 是用于数值计算的库。 fetch_openml 是用于从 OpenML 下载数据集的函数。 2. 获取 MNIST 数据集 X, y fetch_openml(mnist_784, version1, return_X_yTrue)fetch_ope…

LeetCode算法(双指针)

今天的题目主要都是力扣前100中&#xff0c;关于双指针的题 1.移动零 链接&#xff1a;移动零 示例&#xff1a; 示例 : 输入: nums [0,1,0,3,12] 输出&#xff1a;[1,3,12,0,0] 可以看到保持原有元素的顺序&#xff0c;将所有的0&#xff0c;移动到数组最后方即可。 这…

开源项目工具:LeanTween - 为Unity 3D打造的高效缓动引擎详解(比较麻烦的API版)

1.LeanTween.reset() 一、工具介绍 参考&#xff1a;推荐开源项目&#xff1a;LeanTween - 为Unity 3D打造的高效缓动引擎-CSDN博客 LeanTween是一个专为Unity 3D引擎设计的高效缓动&#xff08;tweening&#xff09;库&#xff0c;它提供了简单易用的API&#xff0c;帮助开…

ctfshow(175->178)--SQL注入--联合注入及其过滤

Web175 进入界面&#xff1a; 审计&#xff1a; 查询语句&#xff1a; $sql "select username,password from ctfshow_user5 where username !flag and id ".$_GET[id]." limit 1;";返回逻辑&#xff1a; if(!preg_match(/[\x00-\x7f]/i, json_enc…

数据结构(8.4_3)——堆的插入删除

在堆中插入新元素 在堆中删除元素 总结&#xff1a;

Linux:权限的深度解析(小白必看!!!)

文章目录 前言一、Linux重要的几个热键二、关机三、扩展命令总结四、shell命令以及运行原理感性理解五、Linux权限的概念1. 权限的概念2. 认识人&#xff08;用户&#xff09;1&#xff09;创建人2&#xff09;人分类3&#xff09;人切换4&#xff09;指令提权 3. ll下文件的权…

一些待机电流波形特征

一、待机电流波形 最干净的待机电流波形应该只有paging&#xff0c;不过需要注意2点&#xff1a; 每个paging的间隔&#xff0c;不同网络可能不一样&#xff0c;有可能是320ms, 640ms 待机网络 paging 间隔 1分钟的耗电量 单个耗电量 单个待机电流 单个波形时长 4G 64…

二十三、Python基础语法(包)

包(package)&#xff1a;包是一种组织代码的方式&#xff0c;可以将相关的模块组合在一起&#xff0c;以便更好地管理和重用代码&#xff0c;包的目录中有一个特殊代码文件__init__.py&#xff0c;包的命名也要遵循标识符的规则。 一、包的结构 一个 Python 包通常是一个包含…

NLTK无法下载?

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 nltk无法下载怎么办&#xff1f;什么是NLTK&#xff1f;为什么要用NLTK&#xff1f;如何下载&#xff1f; nltk无法下载怎么办&#xff1f; 什么是NLTK&#xff1f; NLTK是学习自然…