初识NoSQL(一文读懂)

news2024/11/15 7:55:45

最近参加了Oracle的数据库培训,对NoSQL非常好奇,总结一下关于NoSQL的认识。

  • NoSQL是Not Only SQL,并不是去除掉SQL,泛指非关系型的数据库。
  • 关系,指关系模型,具体指同一个对象在不同属性上的值 以及 不同对象在相同属性上的值是与关系的,这里的关系不仅指数值关系(大于、小于、相同)也包括业务关系(比如需要做联合查询)

为什么要引入NoSQL 

原因一:传统的关系型数据库(SQL)在某些场景下无法适用,或者说支持不足。

关系型数据库与结构化数据的匹配较好,可以采用类似于二维表格的形式进行数据存储。结构化数据指的是由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范,也称作为行数据,特点为:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。例如:

对于非结构化数据,数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据,例如办公文档(Word)、文本、图片、HTML、各类报表、视频音频等。

以及半结构化数据(介于结构化与非结构化数据之间的数据),它是结构化数据的一种形式,虽然不符合二维逻辑这种数据模型结构,但是包含相关标记,用来分割语义元素以及对记录和字段进行分层。常见的半结构化数据有XML和JSON,例如:

非结构化数据和半结构化数据使用关系型数据库非常麻烦,无法填充二维表格或无法完全填充。

原因二:关系型数据库的缺点。

  • 高并发下IO压力大:只要操作(读/写)某个具体值,就需要把整行都读入内存。
  • 维护索引代价高:插入和修改数据需要更新涉及到的全部索引,降低读写能力,索引越多读写能力越差占用空间也大。
  • 维护数据一致性代价高:
  • 为维护数据一致性付出的代价大:采用锁机制控制并发,SQL中的不同隔离级别带来了复杂的运算处理,降低读写能力。
  • 水平扩展容易产生问题:分库分表后需要跨库跨表查询,做分布式事务处理比较麻烦。
  • 表结构不易扩展:表结构是固定的,新增和删除操作影响整张表,需要锁表。
  • 搜索功能弱:对于搜索关键字需进行完整精确匹配,不支持分词。

关系型数据库遵循ACID规则(原子性、一致性、独立性、持久性),在高并发时存在性能瓶颈,容易出现数据库CPU高、Sql执行慢、客户端报数据库连接池不够等情况。因此超大规模数据的存储通常需要使用NoSQL。

NoSQL的特点

优点:

  • - 高可扩展性
  • - 分布式计算
  • - 低成本
  • - 架构的灵活性,半结构化数据
  • - 没有复杂的关系

缺点:

  • - 没有标准化
  • - 有限的查询功能(到目前为止)
  • - 最终一致是不直观的程序

常见的NoSQL类型

主要包括:键值(Key-Value)存储数据库、列存储数据库、文档型数据库、图形(Graph)数据库。

什么时候使用NoSQL

关系型数据库与非关系型数据库的选择需要考虑两点:

第一点,非关系型数据库都是通过牺牲了ACID特性来获取更高的性能的,假设两张表之间有比较强的一致性需求,那么这类数据是不适合放在非关系型数据库中的。

第二点,核心数据不走非关系型数据库,例如用户表、订单表,但是这有一个前提,就是这一类核心数据会有多种查询模式,例如用户表有ABCD四个字段,可能根据AB查,可能根据AC查,可能根据D查,假设核心数据,但如果是个KV形式,比如用户的聊天记录,那就需要使用NoSQL。

通常情况下,非核心数据尤其是日志流水一类中间数据必须使用非关系型数据库,以及具有写远高于读写入量巨大这两个特点的数据也需要使用NoSQL。这类数据一旦使用关系型数据库作为存储引擎,将大大降低关系型数据库的能力,正常读写QPS不高的核心服务会受这一类数据读写的拖累。

目前,谷歌和Facebook每天都需要为他们的用户收集万亿比特的数据,包括用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志等,这些数据存储不需要固定的模式,采用NoSQL以便于横向扩展。此外,Mozilla、Adobe和LinkedIn也都广泛使用了NoSQL。

参考资料(引用)

博客园:https://www.cnblogs.com/xrq730/p/11039384.html(非常经典、强烈推荐)
菜鸟教程:https://www.runoob.com/mongodb/nosql.html
百度百科:https://baike.baidu.com/item/%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/8999831

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

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

相关文章

一个AK/SK泄露检测的实现思路

01、简介 在企业上云的过程中,AK/SK泄露导致的数据泄露事件屡见不鲜。在企业混合云架构下,公有云和私有云都存在大量的AccessKey,如何有效地检测可能的AK/SK泄露事件,一直困扰着企业的安全人员。 本文提供了一种比较容易实现的思路…

UART协议学习——异步全双工串行通信方式

文章目录 前言一、简介1、优点2、缺点 二、数据格式三、波特率1、定义2、波特率和采样频率 四、常见接口电平1、TTL电平2、RS232(负逻辑)3、RS485 前言 2023.4.22 世界地球日 一、简介 UART:Universal Asynchronous Receiver/Transmitter&a…

Albert-Z-Guo/Deep-Reinforcement-Stock-Trading

深加固股票交易 该项目打算在投资组合管理中利用深度强化学习。框架结构的灵感来自Q-Trader。代理人的奖励是在每个行动步骤评估的未实现净利润(意味着股票仍在投资组合中且尚未兑现)。对于每一步的不作为,投资组合中都会增加负惩罚&#xf…

USMART 函数错误解决方法

身为电子工程师,看了马斯克的星舰飞船,真是太帅了; 深知一个良好的测试环境对产品性能的影响,对工作效率的提升。 小资源MCU调试代码的工具USMART 使用起来。 移植的文章网上有很多,但是对移植过程中使用错误的文章…

mybatisPlus拦截器使用demo

概述 顾名思义,就是一个拦截器,和springmvc的拦截器,servlet的过滤器差不多,就是在执行前拦了一道,里面可以做一些自己的事情。 平时用的mybatisPlus较多,直接以com.baomidou.mybatisplus.extension.plug…

VUE中使用element-china-area-data

使用element-china-area-data的中国省市区级联数据编写城市选择器。以下为解决效果图: (1)安装 npm install element-china-area-data -S (2)引入 import { regionData, CodeToText, TextToCode } from ‘element-ch…

LDO系列--LDO并联扩容

1、不能简单并联(无法电流均衡) 两个LDO的内部的带隙基准源(参考电压),FET的特性,以及误差放大器的噪声不同(如失调电压),实际LDO输出的目标电压依旧是有差异的。 这就导致了,LDO-High的目标输出电压高一些…

STM32F103基于标准库+I2C SSD1306仿数码管RTC时钟显示

STM32F103基于标准库I2C SSD1306仿数码管RTC时钟显示 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取。 🍁对于文中所提供的相关资源链接将作不定期更换。 📺显示效果&a…

UWB芯片DW300之CRC模式介绍及代码实现

SPI CRC模式 当启用SPI CRC模式时,可以为SPI传输提供循环冗余校验序列的额外保护。这种操作模式在默认情况下是禁用的,但可以通过SYS_CFG寄存器中的SPI_CRCEN位启用(和禁用)。 虽然SPI CRC检查在主机微处理器必须为每个SPI写入和读取事务计算CRC的附加软件开销方面有缺点,但…

SOFA Weekly|SOFARPC 5.10.0 版本发布、SOFA 五周年回顾、Layotto 社区会议回顾与预告...

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

【Mysql】分库分表

【Mysql】分库分表 文章目录 【Mysql】分库分表1. 介绍2. 拆分策略2.1 垂直拆分2.1.1 垂直分库2.1.2 垂直分表 2.2 水平拆分2.2.1 水平分库2.2.2 水平分表 3. MyCat3.1 概述 1. 介绍 采用单数据库进行数据存储存在以下瓶颈: IO瓶颈:热点数据太多&#x…

项目管理必备!20个实用技巧全掌握!

即使在最完美的条件下,管理一个项目也是很困难的。 ​项目管理的成败好坏与优秀项目团队密不可分的,建设一个好的团队将会更团结、更坚强、更具有竞争力, 更能适应无限变化的环境。 ​不幸的是,还是有很多项目经理实质上没有没有总结出自己思维方法和运…

进程状态

理念上的状态 新建 子面意思运行 task_struct在运行队列中排队,就叫做运行态阻塞 等待非CPU资源就绪挂起 当内存不足的时候,OS通过适当的置换进程的代码和数据到磁盘,进程的状态就叫做挂起退出 子面意思 实际上的状态 …

ARM Coresight 及 DS-5 介绍 5 - DS-5 断点设置及常用Debug 命令

文章目录 1.1 DS-5 Debug 方法梳理1.2.1 DS-5 设置断点 Debug1.2.2 DS-5 常用 Debug 命令 1.1 DS-5 Debug 方法梳理 通常在调试过程中需要打断点来进行单步调试,这个时候可以按照下面步骤来进行: 在使用 DS-5 Debug 之前需要先 load 所编译的 elf 文件&…

【css】使用css实现提示框各种弹出效果。

简言 最近工作编写页面时,需要有一个提示框从下到上弹出的效果。 冥想了一下,实现了出来。 记录下实现思路。 实现思路 实现步骤如下: 编写样式。 首页要有承载内容的容器(box)。外层在套一个包装盒子(用来进行定位…

超详细的ubuntu安装opencv2.0//test ok

目录 1. 首先确保在Ubuntu上已经安装了cmake和make 1.1 安装make 1.2 安装cmake 2 安装依赖环境 3 下载opencv源码 4 编译源码并安装 4.1 进入opencv源码目录中,新建build文件夹 4.2 进入build文件夹,打开终端使用cmake生成makefile 4.3 安装ope…

Windows环境下实现设计模式——迭代器模式(JAVA版)

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现迭代器模式(设计模式)。 不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式&#xff…

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

1、Ingress将所有Service统一网关入口 底层也是使用了nginx,所以使用Ingress才是整个项目的统一入口。 官网地址:https://kubernetes.github.io/ingress-nginx/ 1、安装 先下载安装文件 wget https://raw.githubusercontent.com/kubernetes/ingress-…

HTB-Tenet

HTB-Tenet 信息收集80端口/users.txt目录/wordpress/wp-login.php tenet.htb 立足www-data -> neilneil -> root 信息收集 80端口 apache 2.4.49存在的exploit。 目录扫描 /users.txt目录 /wordpress/wp-login.php 在Go to Tenet超链接会出现tenet.htb。 添加至hosts再…

【Linux基础IO之 内存文件操作】

目录: 前言一、引入C语言中的文件操作系统文件操作open 位图权限close、write、readlseek C语言中的文件操作函数与系统文件操作函数的联系 三、文件描述符1.文件描述符是什么2.文件缓冲区再谈重定向 四、文件缓冲区分类语言级缓冲区为什么要有两个缓冲区 五、仿写c…