NoSql是一个很老的概念了,但对自己来说,仍然是一个短板,果断补上。

首先通过几个简单的例子来了解NOSQL在国内的情况(2013年左右的数据,有些过时),比如新浪微博,其就有200多台物理机运行着Redis,其结合NOSQL和MySQL一起使用,关系型数据,通过索引保存在MYSQL中,K/V数据保存在Redis中。淘宝的Oceanbase用于处理线上事务,Tair用于K/V存储,于2010上线(自己落后时代不少啊)。优酷的现在评论业务使用mongoDB存储,运营数据分析及挖掘处理使用Hadoop/HBase。

对于数据来说,常用的单位按序增加为,Byte, KB, MB, GB, TB, PB, EB, ZB, YD, DB, NB。

大数据的特点体现在4个V上,分别是: Volumn数据量,比如腾讯涉及8亿以上用户,2013年的总数据量压缩后仍然高达100PB,并以每月10%的速度增长;Variety数据类型繁多,包括文字、视频、图片、地理位置等;Value价值密度低,商业价值高;Velocity处理速度快,"1秒定律"。

大数据相关技术:采集技术,比如RFID射频数据、传感器数据、社交网络数据等;预处理技术,对数据进行抽取和清洗操作;大数据存储与管理技术,比如DFS分布式文件系统,NOSQL数据库;大数据分析与挖掘技术,包括数据挖掘,机器学习等;大数据应用技术,在国内常用于商业智能、政府决策和公共服务。

什么是NOSQL? "Not Only SQL"

过去传统的关系型数据库,优点是通用性和性能都很高、通过事务保持数据一致性、可以通过JOIN完成复杂查询,但缺点是不擅长大量数据的写入、表结构的改变、快速返回简单查询等。

NOSQL数据库易于数据的分散,其本身不支持join操作,各个数据独立设计,很容易把数据分散到各个服务器,相对于提升服务器性能增大规模可以低成本的提高系统整体处理能力。

接下来通过一个表格来了解NOSQL数据库的类型,加粗部分为最常用实现。

NOSQL类型

常见实现

键值对类型

Memcached临时性, Redis兼具临时性和永久性,可用缓存数据,读写非常快速

Dynamo, LevelDB

文档类型

MongoDB, CouchDB, 无需定义表结构,可以使用复杂查询条件

面向列的类型

Cassandra, HBASE,Hadoop 这类数据库相对最难理解,但重要性最高,扩展性非常强。我们过去的数据库,数据存储以行位单位,便于少量行的读取和更新,而面向列的数据库则适合对大量行少量列进行读取,对所有特定列进行同时更新

Tip:对我们来说,传统数据库和NOSQL数据库不分好坏,能够合理的使用才是王道。

对于传统数据库来说,其数据一致性通过事务的ACID特性来保证,但对于分布式系统来说,这套方案是行不通的。NOSQL系统就是一个分布式系统,其对于客户来说就是一个统一的整体,但实际上是由一组服务器组成的。提到分布式系统的数据一致性,就不得不提Eric Brewer提出的CAP理论,CAP分别表示Consistency强一致性Availability可用性Partition Tolerance分区容错性

根据该理论, 任何一个数据共享系统只能满足这三个特性中的两个,在选型时需要做相应的权衡。

放弃P分区容错性:出现网络故障时,需要将所有数据放到一台机器,但对于NOSQL数据库一定来说,一定需要P

放弃A可用性:出现故障时,服务不可用,需要等待

放弃C强一致性:但保留数据的最终一致性,以网购为例,对于同一货物的两个订单吗,较晚的订单将被告知售罄。对于一些不敏感的数据,比如头像、评论,可以放弃C,但对于金额等敏感数据则不能。

相对于传统的ACID, NOSQL引入BASE准则。

Basically Available基本可用:系统能够基本运行,一直提供服务。

Soft-State软状态:系统不要求一直保持强一直状态。

Eventual consistency最终一致性:系统需要在某一时刻后达到一致性要求。

ACID

BASE

强一致性

弱一致性

隔离性

可用性优先

悲观,保守方法(悲观锁)

乐观方法(乐观锁)

难以变化

适用变化、简单快捷

数据一致性的实现方法:Quorun系统NEW策略;时间戳策略;向量时钟。(这部分需要时再深入学习,目前只需应用水平)

对于当下的海量数据,过去通过垂直扩展性能的方式已不合适,因此水平扩展已成为必由之路,通常来说,对于NOSQL数据库,水平扩展的方式就是复制和分片

方案

诠释

所有数据存放在一个服务器上

 

分片(Sharding)

将数据不同部分分配到不同服务器

记住:在设计,及早考虑分片

主从复制(Master-Slave)

主负责处理数据更新,并启动单独进程将数据同步到从

但主仍然存在瓶颈和单点故障

对等复制(Peer to Peer)

同时写入时,存在不一致的情况,可以由应用程序来判断

选举模式

复制和分片同时使用

 

分片的算法:Range-Based Partition(mongodb), Round-Robin(mod算法),一致性hash算法(详情请见http://www.cnblogs.com/wanliwang01/p/Architect_JAVA_LINKHOME.html)。

Tip:

五分钟法则:一条记录频繁被访问则应该放在内存,反之则应该放在硬盘,这个临界时间就是五分钟。

不要删除数据:包括不用使用IsDeleted软删除,推荐的方式是使用代表数据状态的字段,如:有效、停用、弃置、取消等。

参考资料:

  1. 皮雄军. NoSQL数据库技术实战[M]. 北京:清华大学出版社, 2015.

NOSQL基础概念的更多相关文章

  1. nginx架构与基础概念

    1       Nginx架构 Nginx 高性能,与其架构有关. Nginx架构: nginx运行时,在unix系统中以daemon形式在后台运行,后台进程包含一个master进程和多个worker ...

  2. NoSQL基础学习

    NoSQL基础学习 最近学习的第一个Nosql就是Mongodb,为了了解Nosql的基本知识,特地总结,主要是学习Nosql的理论 一.Introduction(介绍) 它是“ Not Only S ...

  3. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  5. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  6. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  7. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  8. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  9. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

随机推荐

  1. Python自学笔记——matplotlib极坐标.md

    一.极坐标 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向).对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到 ...

  2. 想询问一个职业规划的问题,前端开发 or nodejs?

    先说说个人情况,目前个人定位于初中级前端吧,工作近两年,目前前端开发和nodejs都有一定的了解,水平感觉可以搭一些小型的网站.作为前端开发,目前掌握的技术是javascript,平时更多的是用jqu ...

  3. while循环语句的几种方式

    我们知道,在Python中经常我们要使用循环,其中最常用的是while循环,while有很多结合方式,我们知道,如果一个循环没有结束语句那么就失去了意义,所以我们一定要有结束语句,下面来看看while ...

  4. NODEJS环境搭建 第一篇 安装和部署NODEJS

    一.下载安装文件 根据自己当前系统环境,下载相对应的安装文件 https://nodejs.org/en/download/ 二.双击安装 都傻瓜式的安装步骤,一步一步安装就好了. 三.检查安装结果 ...

  5. Asp.net core WebApi 使用Swagger生成帮助页

    最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...

  6. 随机抽样一致算法(Random sample consensus,RANSAC)

    作者:桂. 时间:2017-04-25  21:05:07 链接:http://www.cnblogs.com/xingshansi/p/6763668.html 前言 仍然是昨天的问题,别人问到最小 ...

  7. python基本数据类型——tuple

    一.元组的创建与转换: ages = (11, 22, 33, 44, 55) ages = tuple((11, 22, 33, 44, 55))ages = tuple([]) # 字符串.列表. ...

  8. [angularjs] MVC + Web API + AngularJs 搭建简单的 CURD 框架

    MVC + Web API + AngularJs 搭建简单的 CURD 框架 GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage ...

  9. 蓝桥杯-括号问题-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  10. crontab定时任务不执行的原因

    1.重启crontab若是遇见"You (cloudlogin) are not allowed to use this program (crontab)                 ...