当前位置: 首页 > news >正文

高性能架构模式——高性能NoSQL

目录

    • 一、关系数据库的缺点
    • 二、常见的 NoSQL 方案分 类
      • 2.1、K-V 存储
      • 2.2、文档数据库
      • 2.3、列式数据库
      • 2.4、全文搜索引擎
    • 三、高性能 NoSQL 方案的典型特征和应用场景
      • 3.1、K-V 存储典型特征和应用场景
      • 3.2、文档数据库典型特征和应用场景
        • 3.1.1、文档数据库的 no-schema 特性的优势
        • 3.1.2、文档数据库的 no-schema 特性的劣势
      • 3.3、列式数据库典型特征和应用场景
      • 3.4、全文搜索引擎典型特征和应用场景
        • 3.4.1、全文搜索基本原理
        • 3.4.2、全文搜索的使用方式

本文来源:极客时间vip课程笔记

一、关系数据库的缺点

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

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

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

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

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

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

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

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

二、常见的 NoSQL 方案分 类

2.1、K-V 存储

  • 解决关系数据库无法存储数据结构的问题,以 Redis 为代表。

2.2、文档数据库

  • 解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。

2.3、列式数据库

  • 解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。

2.4、全文搜索引擎

  • 解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。

三、高性能 NoSQL 方案的典型特征和应用场景

3.1、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)的长度。

    LLEN key 获得队列(List)的长度。

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

    每条数据除了数据编号(例如,行 ID)

http://www.dtcms.com/a/283494.html

相关文章:

  • 如何打造全场景数字化OA办公平台?
  • 网络(数据库1)
  • oracle2kingbase的字段长度问题
  • STM32外设介绍4(ADC)
  • Windows11怎样禁止应用开机启动
  • 评估遥感云雾浓度的无参化指标(适用于其它合成雾的场景)
  • 【JVM】内存分配与回收原则
  • leetcode 3201. 找出有效子序列的最大长度 I II
  • 演示数据库操作
  • 测试学习之——Pytest Day2
  • 《十万线段绘乾坤:Canvas离屏渲染深度剖析》
  • 低代码深度切入制造业需求的实践路径
  • 在 CentOS 8 上彻底卸载 Kubernetes(k8s)
  • 每日钉钉API探索:requestAuthCode网页应用(H5微应用)免登授权
  • 【leetcode】1422. 分割字符串的最大得分
  • 创建SprngBoot项目的四种方式
  • FreeRTOS中断管理STM32
  • 【Java】【力扣】20.有效的括号
  • 基于迁移学习的培养基配方开发方法
  • XSS-LABS的Level1-8
  • Python —— 真题三
  • NumPy 详解
  • 【static 修饰局部变量、全局变量、函数】
  • Swift6.0 - 5、基本运算符
  • 账户和组管理
  • JavaEE——死锁
  • PowerBI实现仅在需要图表时显示图表
  • 傅里叶变换算子性质证明
  • GTSuite许可管理常见问题及解决方案
  • 基于FPGA的IIC控制EEPROM读写(1)