架构篇16:高性能NoSQL

news2024/11/18 12:26:47

文章目录

    • K-V 存储
    • 文档数据库
    • 列式数据库
    • 全文搜索引擎
    • 小结

关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。

  • 关系数据库存储的是行记录,无法存储数据结构

以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。

  • 关系数据库的 schema 扩展很不方便

关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。

  • 关系数据库在大数据场景下 I/O 较高

如果对一些大量数据的表进行统计之类的运算,关系数据库的 I/O 会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。

  • 关系数据库的全文搜索功能比较弱

关系数据库的全文搜索只能使用 like 进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。

针对上述问题,分别诞生了不同的 NoSQL 解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL 方案带来的优势,本质上是牺牲 ACID 中的某个或者某几个特性,因此我们不能盲目地迷信 NoSQL 是银弹,而应该将 NoSQL 作为 SQL 的一个有力补充,NoSQL != No SQL,而是 NoSQL = Not Only SQL。

常见的 NoSQL 方案分为 4 类。

  • K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
  • 文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
  • 列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
  • 全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。

今天,我们讨论一下各种高性能 NoSQL 方案的典型特征和应用场景。

K-V 存储

K-V 存储的全称是 Key-Value 存储,其中 Key 是数据的标识,和关系数据库中的主键含义一样,Value 就是具体的数据。

Redis 是 K-V 存储的典型代表,它是一款开源(基于 BSD 许可)的高性能 K-V 缓存和存储系统。Redis 的 Value 是具体的数据结构,包括 string、hash、list、set、sorted set、bitmap 和 hyperloglog,所以常常被称为数据结构服务器。

以 List 数据结构为例,Redis 提供了下面这些典型的操作(更多请参考链接:http://redis.cn/commands.html#list):

  • LPOP key 从队列的左边出队一个元素。
  • LINDEX key index 获取一个元素,通过其索引列表。
  • LLEN key 获得队列(List)的长度。
  • RPOP key 从队列的右边出队一个元素。

以上这些功能,如果用关系数据库来实现,就会变得很复杂。例如,LPOP 操作是移除并返回 key 对应的 list 的第一个元素。如果用关系数据库来存储,为了达到同样目的&

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

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

相关文章

使用Java编写RESTful Web服务

RESTful Web服务是一种基于HTTP协议的软件架构风格,它使用不同的HTTP方法(如GET、POST、PUT、DELETE等)来执行不同的操作,并使用统一的接口来访问和操作资源。在Java中,有多种框架可用于编写RESTful Web服务&#xff0…

Typecho后台无法登录显示503 service unavailable问题及处理

一、Typecho 我的博客地址:https://www.aomanhao.top 使用老薛主机动态Typecho博客框架handsome主题的搭配,文章内容可以异地网页更新,可以听后台背景音乐,很好的满足我的痛点需求,博客部署在云端服务器访问响应较快…

阿里云4核8G云服务器价格、带宽及系统盘费用

阿里云服务器4核8g配置云服务器u1价格是955.58元一年,4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格,规格不同性能不同,价格也不同,阿里云服务器网al…

Steam幻兽帕鲁搭建教程,如何选择服务器

如何选购服务器 大家可以根据自己的需求选购,大家最好选用物理服务器,可以找我参考一下。1到6人建议使用16H32G的20带宽的。12人以上建议大家使用E5的CPU内存64G的带宽50起步的。大家在选择服务器商的时候一定要选择正规的拥有资质的,这样售…

RabbitMQ系列之交换机的使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《RabbitMQ系列之交换机的使用》。🎯&…

ntp时间适配服务器和ssh免密登录

1.配置ntp时间服务器,确保客户端主机能和服务主机同步时间 服务端server向阿里时间服务器进行时间同步 第一步:定位服务端server #安装软件 [rootserver ~]# yum install chrony -y # 编辑配置文件,定位第3行,修改…

Win10添加网络打印机后无法打印的解决方法

在Win10电脑中,用户成功添加了网络打印机,却遇到了无法打印的问题,导致用户不能顺利完成打印任务。以下小编分享三种简单的方法,帮助大家轻松解决Win10网络打印机已添加但无法打印的问题,解决后用户就能通过网络打印机…

【AI大模型】WikiChat超越GPT-4:在模拟对话中事实准确率提升55%终极秘密

WikiChat,这个名字仿佛蕴含了无尽的智慧和奥秘。它不仅是一个基于人工智能和自然语言处理技术的聊天机器人,更是一个能够与用户进行深度交流的智能伙伴。它的五个突出特点:高度准确、减少幻觉、对话性强、适应性强和高效性能,使得…

pnpm 源不对 Will retry in 10 seconds. 2 retries left.

现象 由于使用npm config set registry 切换淘宝源时,把地址打错了。 后面使用pnpm install 时出现 此时无论我怎么使用npm config set registry 或者pnpm config set registry 切回正确的源均没有效果。 解决 在其他用npm的项目运行一下npm i 再运行pnpm i 即…

生产问题(十四)K8S抢占CPU导致数据库链接池打爆

一、引言 线上一天出现了两次数据库连接失败的大量报错,一开始以为是数据库的问题,但是想了想如果是数据库的问题,应该会有大量的应用问题 具体分析之后,发现其实是容器cpu出现了Throttled,导致大量线程阻塞 二、分析 …

UDS Flash刷写流程介绍

一、刷写流程介绍 1.1刷写包含以下三个步骤:预编程,编程,后编程 1.2预编程步骤 此步骤是保证能够正常进入编程(10 02)会话下。 (1)如果无特殊要求,只保证刷写能够正常进行&#x…

k8s的图形化工具---rancher

rancher是一个开源的企业级多集群的k8s管理平台。 rancher和k8s的区别:都是为了容器的调度和编排系统。但是rancher不仅可以调度还可以管理整个k8s集群。 rancher自带监控(普罗米修斯) 实验部署 master01 20.0.0.32 node01 20.0.0.34 node02 20.0.0.35 test …

嵌入式-stm32-江科大-EXTI外部中断

一:EXTI外部中断(external interrupt) 1.1 STM32 中断系统 中断是指在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前的程序,转而去处理中断程序,…

菜鸟初进stable diffusion

不知道是不是玩novelai被boss看到了,推荐了我学stable diffusion 扩散模型 DALL E Midjourney stable diffusion latent diffusion 说是改进点在于“给输入图片压缩降低维度,所以有个latent,从而减少计算量”,类似于下采样吧&…

消息队列RabbitMQ.01.安装部署与基本使用

目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…

Servlet 与 MVC

主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理&a…

leetcode 刷题2

二分查找的绝妙运用&#xff1a; 看到有序数列&#xff0c;算法复杂度 0033. 搜索旋转排序数组 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left < right) {int mid left (right - …

Debezium发布历史85

原文地址&#xff1a; https://debezium.io/blog/2020/03/05/db2-cdc-approaches/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 运行 Db2 更改数据捕获的方法 2020 年 3 月 5 日 作者&#xff1a; Luis Garcs…

JanusGraph图数据库的应用以及知识图谱技术介绍

目录 JanusGraph介绍 JanusGraph 的主要优势 JanusGraph的应用&#xff1a; JanusGraph 的行业应用&#xff1a; 架构概览 分布式技术应用 横向扩展能力 程序与janus的交互 Janus与图数据库相关概念 结构化存储 图结构存储 实体关系存储 知识存储技术 JanusGraph介…

数据结构<1>——树状数组

树状数组&#xff0c;也叫Fenwick Tree和BIT(Binary Indexed Tree)&#xff0c;是一种支持单点修改和区间查询的&#xff0c;代码量小的数据结构。 那神马是单点修改和区间查询&#xff1f;我们来看一道题。 洛谷P3374(模板): 在本题中&#xff0c;单点修改就是将某一个数加上…