第1章大型互联网公司的基础架构——1.10 其他NoSQL数据库
这里我们简单介绍一下其他常见的NoSQL数据库及其适用的场景,其中部分数据库会在后续服务设计章节中正式使用时再做详细介绍。
1.10.1 文档数据库
文档数据库的典型代表是MongoDB和CouchDB。**文档数据库普遍采用JSON格式来存储数据,而不是采用僵硬的行和列结构,其好处是可以解决关系型数据库表结构(Schema)扩展不方便的问题,以及可以存储和读/写任何格式的数据。**文档数据库与键值存储系统很类似,只不过值存储的内容是文档信息。文档数据库具有很好的可扩展性。
文档数据库适用的场景如下。
- 数据量大,且数据增长很快的业务场景。
- 数据字段定义不明确,且字段在不断变化、无法统一的场景。比如商品参数信息存储,电子设备商品参数有内存大小、电池容量等,服装商品参数有尺码、面料等。
文档数据库不适用的场景如下。
- 需要支持事务,文档数据库无法保证在一个事务中修改多个文档的原子性。
- 需要支持复杂查询,例如join语句。
1.10.2 列式数据库
列式数据库的典型代表是BigTable、HBase等。关系型数据库按照行来存储数据,所以它也被称为“行式数据库”;而列式数据库按照列来存储数据,如图1-44所示的是一个学生信息数据的例子。

列式数据库将每一列的数据组织在一起,这样做有什么好处呢?假设现在要统计各专业的学生人数:
- 如果使用行式数据库,那么首先需要将所有行的数据读取到内存,然后对“专业”列进行GroupBy操作得到结果。虽然我们只关注“专业” 一列,但是其他列也参与了数据读取,磁盘I/O次数较多;
- 而如果使用列式数据库,那么只需要将“专业”列数 据读取到内存,磁盘I/O次数大大减少,提高了查询效率。
列式数据库有很高的存储空间利用率,对于列数据类型是有限枚举(比如性别、专业)的情况,列式数据库可以通过字典表将数据压缩为图1-45所示的形式。

从图1-45中可以看出,性别字典、专业字典分别使用了数字编号来代表原来的字符串,原始数据经过压缩后字符串变为数字,提高了存储空间利用率,且数据量越大,存储空间利用率越高。
列式数据库适用的场景如下。
- 有海量数据插入,但是数据修改极少的场景,比如用户行为收集。
- 数据分析场景,比如针对少数几列做离线数据统计工作。
列式数据库不适用的场景如下。
- 数据高频删除、修改的场景,即不适合直接服务于在线用户。
- 需要支持事务的场景。
1.10.3 全文搜索数据库
全文搜索数据库的典型代表是Elasticsearch。关系型数据库在应对全文搜索场景时,只能通过LIKE语句进行模糊查询,而LIKE语句会扫描全量数据,效率非常低下。全文搜索数据库的出现就是为了解决关系型数据库不支持高效全文搜索的问题,其基本原理是建立单词到文档的索引关系作为“倒排索引”。
如图1-46所示,倒排索引维护着每个关键词在哪些文档中出现过的文档列表。在进行全文搜索时,根据搜索关键词就可以直接获取到相关文档信息。文档列表既可以保存文档ID,也可以记录关键词在每个文档中出现的频率和位置。

倒排索引非常适合根据关键词查询文档内容,所以在各种搜索场景中得到了广泛应用。其典型的应用场景包括:
- 关键词搜索,如搜索引擎;
- 海量数据的复杂查询;
- 数据统计和数据聚合。
倒排索引不适用的场景包括:
- 高频更新数据的场景。在全文搜索数据库中,修改数据实际上是删除旧数据和创建新数据两步操作;
- 需要支持事务的场景。
1.10.4 图数据库
近几年图数据库较为火热,其主要的开源项目有Neo4j、Titan等。图数据库指的并不是存储图片的数据库,而是以“图”这种数据结构存储数据的数据库。
图由两个元素组成:
- 节点:表示一个实体(人、商品等事物)
- 关系:表示两个节点之间的关联关系
对于1.7.1节所举的例子:学生选课系统,如果用图数据库来存储,则会形成图1-47所示的存储结构。

从图1-47中可以看出,图数据库可以很简单且自然地构建出直观的数据模型;同时,我们可以很容易查询任意一个节点与其他节点的关系,解决了关系型数据库不擅长处理实体关系的问题。关系在图数据库中占首要地位,它非常适合强调关系、需要复杂关系查询和分析的业务场景,比如社交网络、知识图谱等。
1.10.5 NewSQL数据库
上述几种NoSQL数据库,虽然分别解决了关系型数据库无法实现高效处理的一些问题,但是也几乎丧失了关系型数据库的强一致性、事务支持等特性。因此,结合关系型数据库及NoSQL数据库两者优点的数据库便产生了,即NewSQL数据库。目前其较为知名的项目包括Google Spanner、TiDB、CockroachDB等。
**NewSQL底层依然采用NoSQL存储数据。**更确切地说,NewSQL使用分布式键值存储系统存储数据,而且在此基础上进行了很多革新,例如:
- 键值存储系统采用LSM Tree模型构建,可以大幅度提升写数据性能;
- 放弃了NoSQL的主从复制模式,而是以更小粒度的数据分片作为高可用单位,主从分片之间通过Paxos或Raft等分布式共识算法进行数据复制;
- 采用分布式事务实现键值存储系统的事务能力。
NewSQL既保留了NoSQL可扩展性强的优势,又在此基础上提供了类似于关系型数据库的事务能力。换言之,NewSQL的本质就是在传统关系型数据库上集成了NoSQL强大的可扩展性。NewSQL的思想很好,它作为数据库领域的后起之秀,正在进入越来越多的应用场景。但是目前NewSQL依然是小众产品,它在高并发、事务性上的表现还需要更多的考验,短期内NewSQL难以完全取代关系型数据库和NoSQL数据库。
总结
什么是文档数据库?
- 文档数据库的典型代表是MongoDB和CouchDB。
- 文档数据库普遍采用JSON格式来存储数据,而不是采用僵硬的行和列结构,其好处是可以解决关系型数据库表结构(Schema)扩展不方便的问题,以及可以存储和读/写任何格式的数据。
- 文档数据库与键值存储系统很类似,只不过值存储的内容是文档信息。
- 文档数据库具有很好的可扩展性。
文档数据库适用的场景?
- 数据量大,且数据增长很快的业务场景。
- 数据字段定义不明确,且字段在不断变化、无法统一的场景。比如商品参数信息存储,电子设备商品参数有内存大小、电池容量等,服装商品参数有尺码、面料等。
文档数据库不适用的场景?
- 需要支持事务,文档数据库无法保证在一个事务中修改多个文档的原子性。
- 需要支持复杂查询,例如join语句。
列式数据库适用的场景?
- 有海量数据插入,但是数据修改极少的场景,比如用户行为收集。
- 数据分析场景,比如针对少数几列做离线数据统计工作。
列式数据库不适用的场景?
- 数据高频删除、修改的场景,即不适合直接服务于在线用户。
- 需要支持事务的场景。
为什么会出现全文搜索数据库?
- 全文搜索数据库的出现就是为了解决关系型数据库不支持高效全文搜索的问题,其基本原理是建立单词到文档的索引关系作为“倒排索引”。
什么是倒排索引?
- 倒排索引建立了单词到文档的索引关系,维护着每个关键词在哪些文档中出现过的文档列表。
倒排索引的应用场景?
- 关键词搜索,如搜索引擎;
- 海量数据的复杂查询;
- 数据统计和数据聚合。
倒排索引不适用的场景包括:
- 高频更新数据的场景。在全文搜索数据库中,修改数据实际上是删除旧数据和创建新数据两步操作;
- 需要支持事务的场景。
什么是图数据库?
- 图数据库是指以“图”这种数据结构存储数据的数据库。
图数据库的适用场景?
- 它非常适合强调关系、需要复杂关系查询和分析的业务场景,比如社交网络、知识图谱等。
为什么会出现NewSQL数据库?
- NoSQL数据库,虽然解决了关系型数据库无法实现高效处理的一些问题,但是也几乎丧失了关系型数据库的强一致性、事务支持等特性。
- 因此,结合关系型数据库及NoSQL数据库两者优点的数据库便产生了。
什么是NewSQL数据库?
- NewSQL底层依然采用NoSQL存储数据。更确切地说,NewSQL使用分布式键值存储系统存储数据。
NewSQL数据库有哪些革新?
- 键值存储系统采用LSM Tree模型构建,可以大幅度提升写数据性能;
- 放弃了NoSQL的主从复制模式,而是以更小粒度的数据分片作为高可用单位,主从分片之间通过Paxos或Raft等分布式共识算法进行数据复制;
- 采用分布式事务实现键值存储系统的事务能力。
相关文章:
第1章大型互联网公司的基础架构——1.10 其他NoSQL数据库
这里我们简单介绍一下其他常见的NoSQL数据库及其适用的场景,其中部分数据库会在后续服务设计章节中正式使用时再做详细介绍。 1.10.1 文档数据库 文档数据库的典型代表是MongoDB和CouchDB。**文档数据库普遍采用JSON格式来存储数据,而不是采用僵硬的行…...
DeepSeek+Kimi生成高质量PPT
DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成结构化PPT大纲(擅长逻辑构建与内容优化)Kimi核心作用:将文本转换为视觉化PPT(提供模板库与排版引擎) 二、操作步骤详解 1. 通…...
web网络安全:跨站脚本攻击(XSS)
跨站脚本攻击(XSS)概述 跨站脚本攻击(XSS,Cross-Site Scripting) 是一种常见的 Web 安全漏洞,攻击者通过向受信任的网站注入恶意脚本(通常是 JavaScript),诱使其他用户在…...
【Python爬虫(44)】分布式爬虫:筑牢安全防线,守护数据之旅
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
微信小程序:多菜单栏设计效果
一、实现效果 二、代码 wxml 编辑前端界面,步骤 菜单逻辑: 逐步取出数组中的项,首先取出顶部菜单项,然后选中后取出选中的底部数据(左侧菜单+右侧内容),然后点击左侧菜单取出选中的左侧菜单对应的右侧内容 ①这里我的数据是全部封装到一个数组对象的,首先我的循环…...
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
1.首先说了一下为什么要用ISUP协议来取流 ISUP主要就是用来解决摄像头没有公网ip的情况,如果摄像头或者所在局域网的路由器有公网ip的话,其实采用rtsp直接取流是最方便也是性能最好的,但是项目的摄像头没有公网IP所以被迫使用ISUP,ISUP是海康…...
蓝桥杯之阶段考核
📖 Day 7:阶段考核 - 蓝桥杯官方模拟赛(限时 4 小时) 📖 一、如何高效完成模拟赛? 模拟赛是一种接近真实竞赛的训练方式。要高效完成模拟赛,需要掌握以下策略: 1. 赛前准备 ✅ 环…...
Python爬虫基础重要数据类型
重要数据类型 列表数据类型 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。列表就是这样的一个数据结构。且列表是Python中最基本也是最常用的数据结构之一。什么是数据结构呢?通俗来讲&a…...
乐享数科:供应链金融—三个不同阶段的融资模式
供应链金融是与产业链紧密结合的融资模式,它主要体现在订单采购、存货保管、销售回款这三个不同的业务阶段,并针对这些阶段提供了相应的金融服务。以下是这三个阶段中主要的融资模式及其特点: 供应链金融融资模式主要分为以下几种࿱…...
【AI】openEuler 22.03 LTS SP4安装 docker NVIDIA Container Toolkit
NVIDIA Container Toolkit 打开网址 Unsupported distribution or misconfigured repository settings | NVIDIA Container Toolkit 为方便离线安装,先下载过来 wget https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo mk…...
【2025全网首发B站教程】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!
【2025全站首发】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测! 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接:P…...
设计模式教程:中介者模式(Mediator Pattern)
中介者模式是一种行为型设计模式,它用于减少对象之间的直接依赖关系。通过引入一个中介者对象,所有对象的交互都通过中介者进行,而不是直接相互通信。这种模式的主要目的是减少对象之间的耦合,提升系统的灵活性和可维护性。 1. 定…...
编写dockercompose脚本,管理redis,activemq,mysql5.7
编写dockercompose脚本,管理redis,activemq,mysql5.7,mysql的root密码设置Duke2007,redis密码设置duke0591 Docker Compose 多服务编排脚本(安全增强版) yaml 复制 services: # # MySQL 5.7 服务配置 #…...
【编程语言】委托与函数指针
委托与函数指针的相似之处: 指向方法:C# 的委托和 C 的函数指针都可以用来指向一个方法或函数。调用方法:它们都可以通过引用(委托或函数指针)来调用指向的方法。 委托与函数指针的主要区别: 类型安全&am…...
基于vue和微信小程序的校园自助打印系统(springboot论文源码调试讲解)
第3章 系统设计 3.1系统功能结构设计 本系统的结构分为管理员和用户、店长。本系统的功能结构图如下图3.1所示: 图3.1系统功能结构图 3.2数据库设计 本系统为小程序类的预约平台,所以对信息的安全和稳定要求非常高。为了解决本问题,采用前端…...
数字后端实现之Innovus中open net原因解析及解决方案
数字IC后端设计实现Innovus中我们经常会碰到如下的WARNING警告信息。这个log是在route或ECO Route阶段报的。这个WARNING必须要看,因为这里是报告当前设计存在open的net,即某些pin只有逻辑连接,而没有实际的物理连接。 这里正常工具应该报ERR…...
MATLAB基础学习相关知识
MATLAB安装参考:抖音-记录美好生活 MATLAB基础知识学习参考:【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分:变量定义和基本运算 生成矩阵: % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…...
Mac系统下使用Docker快速部署MaxKB:打造本地知识库问答系统
随着大语言模型的广泛应用,知识库问答系统逐渐成为提升工作效率和个人学习的有力工具。MaxKB是一款基于LLM(Large Language Model)大语言模型的知识库问答系统,支持多模型对接、文档上传和自动爬取等功能。本文将详细介绍如何在Ma…...
RT-Thread+STM32L475VET6——icm20608传感器
文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行配置1.1 使用外部高速时钟,并修改时钟树1.2 打开I2C3,参数默认即可(I2C根据自己需求调整)1.3 打开串口1.4 生成工程 2. 添加icm20608软件包3. 使能传感器,打开动态链接库4.…...
【信息系统项目管理师-案例真题】2022下半年案例分析答案和详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一(24分)【问题1】(6分)【问题2】(10分)【问题3】(8分)试题二(26分)【问题1】(8分)【问题2】(8分)【问题3】(4分)【问题4】(6分)试题三(25分)【问题1】(12分)【问题2】(7分)【问题…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
