存储系统的三种分类及KV模型
一、数据储存方式类型
1.对象存储
- 通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
2.块存储
- 这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
3.文件存储
- 通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;
二、关系型存储系统SQL
- 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表。多个表组成一个数据库。
1、关系型数据库理论 - ACID
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
A – Atomicity – 原子性
- 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。
C – Consistency – 一致性
- 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
I – Isolation – 隔离性
- 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
D – Durability – 持久性
- 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
- 关系型数据库严格遵循ACID理论。但当数据库要开始满足横向扩展、高可用、模式自由等需求时,需要对ACID理论进行取舍,不能严格遵循ACID。以CAP理论和BASE理论为基础的NoSQL数据库开始出现。
2、关系型数据库有多种,如MySQl、Oracle、SQLite、SQL Server等。
三、非关系型数据存储系统NOSQL
nosql 网站:http://www.nosql-databases.org
1、NoSQL
现代计算系统每天在网络上都会产生庞大的数据量。特性:数据量大、数据变化非常快(数据增长快、流量分布变化大、数据间耦合结构变化快)、数据源很多,为了解决处理,研发出NoSQL;
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。这类数据库主要有这些特点:非关系型的、分布式的、开源的、水平可扩展的。最初的目的是为了大规模web 应用。NoSQL 的拥护者们提倡运用非关系型的数据存储,通常的应用如下特点:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。
非关系型数据库,又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL( Structured QueryLanguage,结构化查询语言),是由Carlo Storzzi最早开发的个轻量、开源、不兼容SQL 功能的关系型数据库,NoSQL主要是指非关系型、分布式、不提供ACID (数据库事务处理的四个基本要素)的数据库设计模式,它具有Key-Value 存储和文档数据库的优点。
2、CAP和BASE分布式系统基础理论
CAP理论:
C:多个数据节点上的数据一致;
A:用户发出请求后的有限时间范围内返回结果;
P:network partition,网络发生分区后,服务是否依然可用;
CAP理论:一个分布式系统不可能同时满足C、A、P三个特性,最多可同时满足其中两者;对于分布式系统满足分区容错性几乎是必须的。
- 由于NoSQL的基本需求就是支持分布式存储,严格一致性与可用性需要互相取舍,由此延伸出了CAP理论来定义分布式存储遇到的问题。
- CAP理论告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P:Partitiontolerance)这三个基本需求,并且最多只能满足其中的两项。
- 对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统。因此架构师需要在C和A之间寻求平衡。
BASE理论
BA,S,E,基于CAP演化而来
BA:Basically Available,基本可用;
S:Soft state,软状态/柔性事务,即状态可以在一个时间窗口内是不同步的;
E:Eventually consistency,最终一致性;
3.分布式存储算法
一致性算法 – Paxos
- Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos 算法就是一种基于消息传递模型的一致性算法
分区(Partitioning)
- 原来所有的数据都是在一个数据库上的,网络IO及文件IO都集中在一个数据库上的,因此CPU、内存、文件IO、网络IO都可能会成为系统瓶颈。而分区的方案就是把某一个表或某几个相关的表的数据放在一个独立的数据库上,这样就可以把CPU、内存、文件IO、网络IO分解到多个机器中,从而提升系统处理能力。
分片(Replication)
- 分区有两种模式,一种是主从模式,用于做读写分离;另外一种模式是分片模式,也就是说把一个表中的数据分解到多个表中。一个分区只能是其中的一种模式。
一致性哈希(Consistent Hashing)
- 一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。
4、NoSQL数据库
key value:键值存储,最著名产品的是DynamoDB, redis
column Family:列式数据库,最著名产品的是hbase
document:文档数据库,最著名产品的是mongodb、Elastic
GraphDB:图式数据库,最著名产品的是Neo4j
Multimodel Databases:多模型的数据库,兼容多种数据库
Object Database 对象存储数据库
Time Series / Streaming Databases:时间序列存储
四、NewSQL新型数据库系统
- NewSQL 是对各种新的可扩展/高性能数据库的简称,新式的关系型数据库管理系统,针对OLTP(读-写)工作负载,追求提供和NoSQL系统相同的扩展性能,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。
- NewSQL系统有两个显着的共同特点:支持关系数据模型、都使用SQL作为其主要的接口。已知的第一个NewSQL系统叫做H-Store,它是一个分布式并行内存数据库系统。
目前NewSQL系统大致分三类:
1、 新架构
第一类型的NewSQL系统是全新的数据库平台,它们均采取了不同的设计方法。它们大概分两类:
(1) 这类数据库工作在一个分布式集群的节点上,其中每个节点拥有一个数据子集。 SQL查询被分成查询片段发送给自己所在的数据的节点上执行。这些数据库可以通过添加额外的节点来线性扩展。现有的这类数据库有: Google Spanner, VoltDB, Clustrix, NuoDB.
(2) 这些数据库系统通常有一个单一的主节点的数据源。它们有一组节点用来做事务处理,这些节点接到特定的SQL查询后,会把它所需的所有数据从主节点上取回来后执行SQL查询,再返回结果。
2、 SQL引擎
第二类是高度优化的SQL存储引擎。这些系统提供了MySQL相同的编程接口,但扩展性比内置的引擎InnoDB更好。这类数据库系统有:TokuDB, MemSQL
3、 透明分片
这类系统提供了分片的中间件层,数据库自动分割在多个节点运行。这类数据库包扩:ScaleBase,dbShards, Scalearc。
五、键值(Key-Value)存储数据库
这一类数据库主要会使用到哈希表,在这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。
key value:键值存储,最著名产品的是DynamoDB, redis
内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。
在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。
作用类似于缓存,并不注重数据完整性和数据一致性。基于键值型的内存数据库比关系型更加易于使用,性能和可扩展性更好,因此在应用上比关系型的内存数据库使用更多。
1、Memcached
- Memcached是一种基于Key-Value开源缓存服务器系统,主要用做数据库的数据高速缓冲,并不能完全称为数据库。
- memcached的API使用三十二位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于 memcached通常只是当作缓存系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程序更新memcached内的资料。
2、Redis
- Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客户端。
参考链接:https://www.cnblogs.com/yangxiaoyi/p/7795274.html
https://www.cnblogs.com/bldly1989/p/6721758.html
作者:任总
链接:https://www.jianshu.com/p/3420f3c3300f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
存储系统的三种分类及KV模型相关推荐
- ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现
ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...
- 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型
常用的三种线性模型算法–线性回归模型.岭回归模型.套索回归模型 线性模型基本概念 线性模型的一般预测模型是下面这个样子的,一般有多个变量,也可以称为多个特征x1.x2.x3 - 最简单的线性模型就是一 ...
- WinSock三种选择I/O模型
在<套接字socket及C/S通信的基本概念>和<WinSock编程基础>中,我们介绍了套接字的基本概念和WinSock API的基本调用规范.我们讨论了阻塞模式/非阻塞模式和 ...
- 时序预测的三种方式:统计学模型、机器学习、循环神经网络
作者 | luanhz 来源 | 小数志 导读 时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用.甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格.天气变化等等.关于 ...
- sql 循环处理数据_图文介绍 SQL 的三种查询计划处理模型,Spark 用了其中两个
我已经在之前的 <一条 SQL 在 Apache Spark 之旅(上)>.<一条 SQL 在 Apache Spark 之旅(中)> 以及 <一条 SQL 在 Apac ...
- 灰、黄、蓝三种颜色的收集装置模型练习及实现思路
下图模型中,灰.黄.蓝三种颜色的收集装置各1个.灰.黄.蓝三种颜色的方形环各3个.方形环随机摆放在收集装置上.要求将方形环进行移动,通过最少次移动,使方形环颜色与收集装置颜色一致.每次可移动一个方形环 ...
- matlab 股,用Matlab来做三种股票的投资模型
用Matlab来做股票的投资模型 2010年12月27日2:32:18 我好累啊! 一.计算每个股票的收益率分布 取 600000 浦发银行 600004白云机场 600005 武钢股份三只股票 红线 ...
- 网络层—IP地址的三种分类方式
本文主要介绍网络层中的IP地址,其中有三种地址管理方法也将会详细介绍说明 IP地址是给因特网上的每一个主机或者是路由器的每一个接口(注意是接口,而不是主机或者是路由器本身)分配的一个在全世界范围中唯一 ...
- 06 外键的三种分类
1. 外键的3种关系 因为有foreign key的约束,使得两张表形成了三种关系 (1)多对一.一对多 (2)多对多 (3)一对一 2. 如何找出两张表之间的关系 分析步骤: #1.先站在左表的角度 ...
最新文章
- springboot2.3.x版本对应的spring5与thymeleaf版本配置
- 云漫圈 | 寻找无序数组的第k大元素
- PL/SQL Developer SQL Window中不能插入多条数据
- LeetCode--11.盛最多的水(双指针,暴力)
- python---基础知识
- php 使用curl模拟登录人人(校内)网
- 通过 Kubeadm联网部署K8S
- Linux操作系统中使用“autogen.sh+configure+make”编译代码的方法
- 金错刀:“打工皇帝”唐骏的职场潜规则
- 乘法分配律逆运算是什么意思_聚类,我们先操弄一下Kmeans,看看什么是非监督学习...
- 数据挖掘实战—财政收入影响因素分析及预测
- windows异常捕获生成minidump windows
- 【MySQL学习】DQL语言的学习 Data Query Language
- 大话设计模式(Java代码)
- 小小知识点(一):辨别性相似度(Discriminative Similarity)
- tp6 导入excel文件
- 字典特征提取,文本特征提取。
- Teach Yourself Programming in Ten Years——用十年教会自己编程
- [附源码]SSM计算机毕业设计小区物业管理系统JAVA
- springboo+vue+nodejs智慧食堂订餐网站设计java
热门文章
- 程序员得到的报酬与他们的生产力不成正比
- 计算机达人成长之路(8)连载
- 502 proxy error解决方法_老大说,网上这种获取真实IP地址的方法不对,我不信......
- mysql的知识_mysql基础知识
- php mysql bbs_BBS(php mysql)完整版(六)
- 工程介绍好处费性质_承包工程项目都要注意什么?怎么防止拖欠工程款
- Python:__all__变量用法
- layui如何获取父节点的父节点_layui树形组件(右键、父节点选中子节点全被选中)...
- C++与Rust变量声明的比较
- 【React性能优化】 redux优化