热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

最终一致性_NoSql的三大基石:CAP理论&BASE&最终一致性

篇首语:本文由编程笔记#小编为大家整理,主要介绍了NoSql的三大基石:CAP理论&BASE&最终一致性相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了NoSql的三大基石:CAP理论&BASE&最终一致性相关的知识,希望对你有一定的参考价值。



关系型数据库的局限

      NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战:

      1、高并发

      一个最典型的就是电商网站,例如双11,几亿大军的点击造成在某一时刻的并发量是很高的,传统的关系型数据库肯定已经是不堪重负了,如Oracle的Session数量推荐的才只有500。

      2、高效率存储海量数据

      大数据时代,数据量已经不是用GB、TB来衡量了,而是EB、ZB了,面对这海量的数据,如何高效率的存储这些数据,关系型数据库无法解决这个问题,以Oracle为例,单机的物理扩展不仅成本高,而且难度也加大了。

      3、高可用&高扩展

      Oracle即使RAC能扩展数台机器,但数量也是有限。

      NoSql的出现即是为了解决这些问题了,但是NoSql并不是用来替代关系型数据库的,因为它本身也有着不可克服的缺陷,俗话说,好处不可能都让你占了。

 

关系型数据库与NoSql一致性的比较

      一般来说,构建NoSql,为了高可用和海量数据存储,我们会选择牺牲一致性,但这并不意味着我们不要一致性,而是我们可以选择不实现强一致性,而实现弱一致性或者最终一致性。无论是在关系型数据库或者NoSql中,我们都是通过事务来实现一致性,下面我们来讨论两者在一致性方面的差异:

      关系型数据库事务的4个基本特性ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

      而对于分布式事务的特性BASE,则是反这个标准的,即基本可用(Basically Availble)、软状态/柔性事务(Soft-state)、最终一致性(Eventual Consistency)。下面是Brewer教授在PODC大会展示的ACID vs BASE:

     

      前面我们说过,NoSql的出现是为了解决高并发、海量数据、高可用等问题的,因而一般分布式是最优选项,我们先来说一下分布式系统的特性:CAP理论,当然,这也是NoSql的特性:

 

CAP理论

      CAP理论是Brewer教授提出的:一个分布式系统不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Tolerance of network Partition)。鱼和熊掌不可兼得。

       一致性:任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。

      可用性:每一个操作总是能在确定的时间内返回,也不是系统随时都是可用的。

      分区容错性:在出现网络分区(如断网)的情况下,分离的系统也能正常运行。

      PS:这里有人可能会问,可用性与分区容错性是不是一个意思(既然分区都可以容错了,不就是可用么),个人理解这里可用性说的是调用不会被阻塞。

      而市场上的NoSql则以CAP理论为指导,大多选择实现了CAP理论的两点(如CA、CP、AP),未实现的即其缺陷部分。下面则是常见NoSql系统的特性:

     

     

    常见NoSql的分类

















































类型



部分代表



特点



列存储



Hbase

Cassandra

Hypertable



顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。



文档存储



MongoDB

CouchDB



文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。



kv存储



Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis



可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)



图存储



Neo4J

FlockDB



图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。



对象存储



db4o

Versant



通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。



xml数据库



Berkeley DB

XML



高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。



 

 参考文档

     https://www.zhihu.com/question/54105974

     http://blog.sina.com.cn/s/blog_3fe961ae010139u6.html

     https://www.cnblogs.com/chaser24/p/6417757.html

     https://baike.baidu.com/item/NoSQL/8828247

     http://www.studyofnet.com/news/365.html

 



推荐阅读
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 我创建了一个新的AWSSSO(使用内部IDP作为身份源,因此不使用ActiveDirectory)。我能够登录AWSCLI、AWSGUI,但 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • Intellij IDEA中详细图解连接MySQL腾讯云数据库以及基础操作
    虽然小编记录的是在IDEA中连接mysql腾讯云数据库。当然,如果读者使用的是本地数据库,也是一样的操作,只是数据库的url书写有所不同。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
author-avatar
手机用户2502897625
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有