【赵渝强老师】什么是NoSQL数据库?

devtools/2025/1/12 22:49:24/

在这里插入图片描述

随着大数据技术的兴起,NoSQL数据库得到了广泛的应用。NoSQL的全称是Not Only SQL,中文含义是不仅仅是SQL。它泛指所有的非关系型数据库,即:在NoSQL数据库中存储数据的模型可能不是二维表的行和列。NoSQL数据库不遵循关系型数据库范式的要求,因此在NoSQL数据库中可能会造成数据的冗余。视频讲解如下:

视频讲解如下

【赵渝强老师】什么是NoSQL数据库

下面介绍几个常见的NoSQL数据库

  • Redis

​Redis是基于内存的NoSQL数据库,不论读写操作都是在内存上完成的,完全吊打磁盘数据库的速度。Redis之所以可以使用单线程来处理,其中的一个原因是,内存操作对资源损耗较小,保证了处理的高效性。Redis之所以具体很高的性能主要得益于以下几点:

(1)纯内存操作

一般都是简单的存取操作,线程占用的时间很少,时间的花费主要集中在IO上,所以读取速度快。

(2)采用单线程模型

Redis采用了单线程模型从而保证了每个操作的原子性,也减少了线程的上下文切换和竞争。

(3)使用IO多路复用模型

非阻塞I/O,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,Redis采用自己实现的事件分离器,效率比较高。

(4)高效数据结构

整个 Redis就是一个全局哈希表,它的时间复杂度是o(1),而且为了防止哈希冲突导致链表过长,Redis会执行再哈希操作,扩充哈希桶数量,减少哈希冲突。并且防止一次性重新映射数据过大导致线程阻塞,采用渐进式再哈希。巧妙的将一次性拷贝分摊到多次请求过程后总,避免阻塞。Redis全程使用哈希结构,读取速度快并且对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如使用有序的数据结构加快读取的速度。可以根据实际存储的数据类型选择不同编码。

  • MongoDB

MongoDB是基于BSON文档的NoSQL数据库。它是NoSQL中功能最丰富、最像关系型数据库的NoSQL数据库

MongoDB是一个基于分布式文件存储的NoSQL数据库,由C++语言编写。MongoDB旨在为Web应用程序提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品,它是非关系型数据库当中功能最丰富、最像关系型数据库的NoSQL数据库。它所支持的数据结构非常松散,其数据结构是类似JSON的BSON格式数据。因此,MongoDB是一种文档型的NoSQL数据库,因此可以存储比较复杂的数据类型。

Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

  • HBase

HBase是Hadoop中基于HDFS之上的列式存储NoSQL数据库。HBase就是大表思想的一个具体实现。它是一个列式存储的NoSQL数据库,适合执行数据的分析和处理。简单来说,就是适合执行查询操作。下图展示了HBase的表结构。
在这里插入图片描述

HBase的表由列族组成,比如上图中的的emp和dept都是列族。列族中包含列,创建表的时候必须创建列族,不需要创建列。当执行插入语句插入数据到列族中的时候,需要指定rowkey和具体的列。如果列不存在,HBase会自动创建相应的列,再把数据插入到对应的单元格上。这里的rowkey相当于关系型数据库的主键。但是与主键不同的是,rowkey与关系型数据库类似不允许为空,但是可以重复的。如果rowkey重复了,表示相同的rowkey是同一条记录。


http://www.ppmy.cn/devtools/149989.html

相关文章

Python 基础知识快速过 50题

全篇大概 1000 字(含代码),建议阅读时间 5min 1. 将字符串 ‘a is a’ 改为 ‘b is b’ s a is a s.replace(a, b)什么是转义字符 在字符串中如果含有特殊字符如:单引号、双引号。需要再特殊字符前加 “” 反斜杠才能使用。 3.…

SQL从入门到实战-2

高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…

Webpack和Vite的区别

一、构建速度方面 webpack默认是将所有模块都统一打包成一个js文件,每次修改都会重写构建整个项目,自上而下串行执行,所以会随着项目规模的增大,导致其构建打包速度会越来越慢 vite只会对修改过的模块进行重构,构建速…

iOS 逆向学习 - Inter-Process Communication:进程间通信

iOS 逆向学习 - Inter-Process Communication:进程间通信 一、进程间通信概要二、iOS 进程间通信机制详解1. URL Schemes2. Pasteboard3. App Groups 和 Shared Containers4. XPC Services 三、不同进程间通信机制的差异四、总结 一、进程间通信概要 进程间通信&am…

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…

案例研究:UML用例图中的结账系统

在软件工程和系统分析中,统一建模语言(UML)用例图是一种强有力的工具,用于描述系统与其用户之间的交互。本文将通过一个具体的案例研究,详细解释UML用例图的关键概念,并说明其在设计结账系统中的应用。 用…

Spring MVC简单数据绑定

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》_springspringmvcmybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版&…

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…