Key-Value键值存储原理初识(NOSQL)
NO-Sql数据库:Not Only不仅仅是SQL
定义:非关系型数据库;NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。需要进一步数据挖掘和分析。
RDBMS VS NOSQL
| RDBMS | NoSQL | 
| 高度组织化结构化数据 | 代表着不仅仅是SQL | 
| 结构化查询语言(SQL) (SQL) | 没有声明性查询语言 | 
| 数据和关系都存储在单独的表中 | 没有预定义的模式 | 
| 数据操纵语言,数据定义语言 | 键 - 值对存储,列存储,文档存储,图形数据库 | 
| 严格的一致性 | 最终一致性,而非ACID属性 | 
| 基础事务 | 非结构化和不可预知的数据 | 
| CAP定理 | |
| 高性能,高可用性和可伸缩性 | 
对可用性及一致性的弱要求原则:BASE
- Basically Availble --基本可用
- Soft-state --软状态/柔性事务。 "Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的
- Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。
NoSQL 数据库分类
| 类型 | 
 部分代表 
 | 特点 | 
| 列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 | 
| 文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 | 
| key-value存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) | 
| 图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 | 
| 对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 | 
| xml数据库 | Berkeley DB XML BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 | 
Key-Value存储:(基于Redis)
传统的关系型数据库,处理一对多的问题,需要把外键放在多的一端,因为RDBMS理论中没有集合这个概念。而使用Redis,我们可以在一端来管理一对多的关系,使用Set。
如果使用MySQL,当数据规模非常大时,上面两个查询操作都需要借助表关联技术,而大表间的join在大型系统中是需要极力避免的操作。相反Redis的每个操作都会局限在一个较小的数据集范围内,而且key-value的存储形式,定位key只是一个复杂度为O(1)的操作。在very huge的数据量下,Redis性能效果非常优异,这就是NoSQL的优势所在!
Key-Value键值存储原理初识(NOSQL)的更多相关文章
- [Swift]LeetCode981. 基于时间的键值存储 | Time Based Key-Value Store
		Create a timebased key-value store class TimeMap, that supports two operations. 1. set(string key, s ... 
- LeetCode 981.基于时间的键值存储(C++)
		创建一个基于时间的键值存储类 TimeMap,它支持下面两个操作: 1. set(string key, string value, int timestamp) 存储键 key.值 value,以及 ... 
- SQLite实现内存键值存储
		SQLite数据文件往Linux内存文件系统/dev/shm/data.sqlite3一放,就是内存级读写性能的SQL系统.用SQLite实现内存键值存储:CREATE TABLE IF NOT EX ... 
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
		CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ... 
- 【插件开发】—— 8 IPreferenceStore,插件的键/值存储!
		前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 ... 
- 用于C# 的异步,持久的键值存储 Akavache 使用
		Akavache是一个异步的,持久的(即写入磁盘)键值存储,用于在C#中编写桌面和移动应用程序,基于SQLite3.Akavache非常适合存储重要数据(即用户设置)以及过期的缓存本地数据. 开源 ... 
- 深入解读键值产生原理,linux中的软链接和硬链接(转)
		键值 = 文件标示符 + 项目ID 当用到进程间的通信时, 必须要注意到的是键值是怎么产生的,我们知道任何一个文件时通过文件名来访问的, 而内核在对应的给其一个值,也就是文件标示符. 系统建立IPC通 ... 
- PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台
		ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ... 
- OAF_OAF控件系列10 - Key Flexfield键值弹性域的实现(案例)
		2014-06-17 Created By BaoXinjian 
随机推荐
- 使用filter: blur() 的时候解决图片周围泛白和容器外范围变模糊的问题
			类似于这种,这个时候出现了周围变模糊,并且边缘泛白的情况 周围模糊这个问题很好解决,给父容器加overflow:hidden:就可以了 效果如上,至于周围泛白的问题就需要动点脑筋了,给目标添加 tra ... 
- spoj 8222 NSUBSTR 求长度为x的子串中出现次数最大值  SAM
			题目大意 给一个字符串S 令F(x)表示S的所有长度为x的子串中 出现次数的最大值. 求F(1)..F(Length(S)) 分析 一个节点\(x\)的长度有\(~~(max(fa),max(x)]\ ... 
- Select语句执行顺序《转》
			原文发布时间为:2010-10-12 -- 来源于本人的百度文章 [由搬家工具导入] 目的在于理解如何Select 【搜索所得】: 标准的 SQL 的解析顺序为:(1).FROM 子句, 组装来自不同 ... 
- 呵呵呵呵。。。系统还原了,终于可以用IE登陆百度了
			原文发布时间为:2009-12-19 -- 来源于本人的百度文章 [由搬家工具导入] 呵呵呵呵。。。今天终于有时间把系统还原了,终于可以用IE登陆百度了 
- dva脚手架 dva-cli 配置roadhogrc,antd-mobile样式按需加载 不生效的问题
			1.新安装dva-cli脚手架版本0.9.2,dva版本是2.4.1,roadhogrc版本是2.4.9 roadhogrc2 与1 的区别把roadhogrc 改成了webpackrc 所以配置an ... 
- [LeetCode] Trapping Rain Water 栈
			Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ... 
- Http协议和Tomcat服务器安装与eclipse集成(重要)
			一.Http协议 1.什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 一种网络协议.所有的WWW文件都必须遵守这 ... 
- python的特殊方法总结
			1.跟运算相关的特殊方法 2.跟运算符相关的方法 
- 谁都能听懂的Redux+Redux-Saga超级傻瓜教程
			对不起本文确实有标题党的嫌疑:) 想要理解本文还是要先会用react和es6,如果连react和es6都不知道是什么的话我也没辙:( 如果你选择用react来开发应用,并且你没对各个组件的状态进行应有 ... 
- atom 默认的换行符设置成LF
			如何把atom 默认的换行符设置成LF Select File->Settings Select ‘Packages’ Under Core Packages->line-ending-s ... 
