NoSQL

devtools/2024/10/19 1:29:03/

在WEB 2.0的“三高”需求面前

1) 对数据库高并发读写的需求
2) 对海量数据的高效率存储和访问的需求
3) 对数据库的高可扩展性和高可用性的需求

传统的关系数据库遇到了难以克服的困难,为了解决这些问题,非关系行数据库应运而生。

1.相关理论基础

1.1 CAP理论

CAP理论: 就是对于一个分布式系统,一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition tolerance)三个特点最多只能三选二


一致性意味着系统在执行了某些操作后仍处在一个一致的状态,简言之,就是所有的结点在同一时刻有相同的数据。
可用性指对数据的所有操作都应有成功的返回。高可用性则是在系统升级(软件或硬件)或在网络系统中的某些结点发生故障的时候,仍可以正常返回。简言之,就是任何请求不管成功或失败都有响应。
分区容忍性这一概念的前提是在网络发生故障的时候。在网络连接上,一些结点出现故障,使得原本连通的网络变成了一块一块的分区,若允许系统继续工作,那么就是分区可容忍的。
注意:对于分布式系统,一般P是必不可少的,所以会有CP,AP两种情况。

1.2 BASE

由于CAP理论的存在,为了提高性能,出现了ACID的一种变种BASE(这四个字母分别是Basically Available, Soft—state, Eventual consistency的开头字母,是一个弱一致性的理论,只要求最终一致性):

  • Basically Available:基本可用。
  • Soft state:软状态,可以理解为“无连接”的,而与之相对应的Hard state就是“面向连接”的。
  • Eventual consistency:最终一致性,最终整个系统(时间和系统的要求有关)看到的数据是一致的。

在BASE中,强调可用性的同时,引入了最终一致性这个概念,不像ACID,其并不需要每个事务都是一致的,只需要整个系统经过一定时间后最终达到一致

1.3 分区

当数据量不断增加时,单一的计算机系统存储已不够用,首要的解决方案就是进行分区存储。

分区的主要方法如下:

1)内存缓存:缓存技术可以看成一种分区。

2)集群:数据库服务集群在为用户提供服务时的透明性(用户感觉像是在一个地方)。是另外一种对数据分区的方法。。然而,这种方法虽然能在某种程度上扩展系统数据持久层,可是集群本身的特性却仅仅应用在了数据库管理系统的顶层,而并未在分布式最初的设计中得到应用。

3)读写分离:指定一台或多台主服务器,所有或部分的写操作被送至此,同时再设一定数量的副本服务器用以满足读请求。这种模型(主/从模型)在读写率很高的时候工作得很好。

(4)范围分割技术/分片(sharding):指对数据按照如下方式进行分区操作,即对数据的请求和更新在同一个结点上,并且对于分布在不同服务器上的数据存储和下载的量大致相同。从可靠性和负载平衡的观点看,数据的碎片也是需要被复制的,并且允许它们被写入主服务器的副本中和所有需要维护数据分区的副本服务器中。而为了做到这一点,需要在分区和存储结点之间做一个映射。这个映射是动态还是静态取决于用户的应用、主服务器的“映射服务/组件”以及网络中用户应用于网络结点之间的基础结构。在分区场景中,关键在于如何将数据库中的对象映射到服务器上。通常的方法是哈希散列法。


1.4 存储分布

存储布局是确定了如何访问磁盘,以及如何直接影响性能,主要分为基于行的存储布局列存储布局带有局部性群组的列存储布局LSM-Tree四种。
LSM-Tree (Log Structured Merge Trees,日志结构合并树)描述的是为了满足高效、高性能、安全地读写的要求,如何有效地利用内存和磁盘存储。LSM-Tree 的观点是由 PatrickO'Neil在1996年率先提出的。LSM-Tree算法思想主要用于解决日志记录索引的问题,这种应用的特点是数据量大、写速率高(2000条/秒),又要建立有效的索引来查找日志中的特定条目。Patrick O'Neil的做法是,在内存里维护一个相同的B树,当内存中的B树达到阈值时,批量进行滚动合并。
 

2.NoSQL数据库的种类


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

相关文章

JAVA开源项目 渔具租赁系统 计算机毕业设计

本文项目编号 T 005 ,文末自助获取源码 \color{red}{T005,文末自助获取源码} T005,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

IDE启动失败

报错:Cannot connect to already running IDE instance. Exception: Process 24,264 is still running 翻译:无法连接到已运行的IDE实例。异常:进程24,264仍在运行 打开任务管理器,找到PID为24264的CPU线程,强行结束即可。 【Ct…

基于IOU匹配的DeepSort目标跟踪与匈牙利算法解析

在多目标跟踪任务中,如何将检测框与已有轨迹进行关联,进而维持目标的连续跟踪,是一个关键问题。DeepSort(Deep Simple Online and Realtime Tracking)是一种常用的多目标跟踪算法,它结合了IOU(交…

【Kubernets】容器网络基础二:通讲CNI(Container Network Interface)容器网络接口实现方案

文章目录 背景知识Underlay网络Overlay网络一、基本概念二、工作原理三、实现方案四、应用场景 两者对比示意图 CNI实现有哪些?FlannelFlannel 的工作原理Flannel 的主要组件数据传输机制总结 Calico一、架构基础二、核心组件与功能三、路由与数据包转发四、安全策略…

【Linux 从基础到进阶】数据加密与安全传输

数据加密与安全传输 1. 引言 在当今数字化时代,数据已经成为最重要的资产之一,而数据泄露和攻击则可能对个人、企业甚至国家带来严重后果。为了保护敏感信息免受非法访问和窃取,数据加密与安全传输显得尤为重要。无论是存储在服务器上的数据…

分布式 ID

背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。随着数据日渐增长,对数据分库分表后也需要有一个唯一ID来标识一条数据或消息,数据库的自增 ID 显然不能满足需求;此时一个能够生成全局唯一 ID 的系统是非常必…

linux(ubuntu22.04) 设置网络通信相关-配置指令

一. 右上角菜单缺失网络设置的页面 sudo apt update sudo apt install network-managersudo systemctl restart NetworkManagersudo apt install gnome-control-center gnome-shell-extension-prefs二. 通过编辑文件手动设置Netplan sudo nano /etc/netplan/01-netcfg.yaml保…

redux

Redux是一个状态管理库,它通过Actions(操作)、Reducer(纯函数)和Store(单体数据容器)来组织应用的状态。Action是用于改变应用程序状态的对象,包含一个type(动作类型&…