memcache、Redis与MongoDB的学习-1

除此接触这三个词的概念,对今天看的资料最了一些整理。

之前经常有看到memcache、Redis与MongoDB相关的数据库,最开始意味这些都只是用来做数据库优化的缓存工具,后来具体看了一些资料之后才发现,这些都是Nosql,下面是网站查找的资料整理出来的知识,比较粗糙,希望在之后的学习中能够不断地完善,获得更深层次的理解。

memcache、Redis与MongoDB是最常用的Nosql数据库,用于解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。对于超大规模,超大流量以及高并发应用情景具有极大的优势。下面是三种数据库的相关特点与比较。

Memcache

优点

  • Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。
  • 支持直接配置为session handle

缺点

  • 只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。
  • 无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。
  • 无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。
  • Memcached内存分配采用Slab Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重value设计。

Redis

优点

  • 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失  的手段。
  • 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
  • 单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
  • 支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。
  • 支持简单的事务需求,但业界使用场景很少,并不成熟。

缺点

  • Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。
  • 支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。
  • Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。

MongoDB

优点

  • 更高的写负载,MongoDB拥有更高的插入速度。
  • 处理很大的规模的单表,当数据表太大的时候可以很容易的分割表。
  • 高可用性,设置M-S不仅方便而且很快,MongoDB还可以快速、安全及自动化的实现节点(数据中心)故障转移。
  • 快速的查询,MongoDB支持二维空间索引,比如管道,因此可以快速及精确的从指定位置获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度。
  • 非结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从而导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响,整个过程会非常快速。

更类似Mysql,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据。Mysql在大数据量时效率显著下降,MongoDB更多时候作为关系数据库的一种替代。

缺点

  • 不支持事务。
  • MongoDB占用空间过大 。
  • MongoDB没有成熟的维护工具。

对比

memcache、Redis与MongoDB等常用nosql解决方案。
三者的对比特性对比如下表:

特性memcacheRedisMongoDB
性能(TPS)较高较高
便利性数据结构单一数据结构较丰富,较少IO数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
存储空间基于LRU算法可改最大可用内存redis2.0后增加VM特性,突破物理内存的限制;可设置过期时间(类似memcache)适合大数据量存储,依赖OS的VM做内存管理,内存消耗较大,服务应独立
可用性(单点问题)本身无数据冗余机制;依赖成熟的hash或者环状算法预防故障,解决单点故障引起的抖动问题单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。依赖客户端来实现分布式读写;主从复制时,无增量复制,存在性能和效率问题支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制
可靠性(持久化)不支持,通常用在做缓存,提升性能依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响从1.8版本开始采用binlog方式支持持久化的可靠性
事务支持在并发场景下,用cas保证一致性事务支持比较弱,只能保证事务中的每个操作连续执行不支持事务
数据分析不支持不支持内置了数据分析的功能(mapreduce)
应用场景动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)数据量较小的性能操作和运算主要解决海量数据的访问效率问题

参考:

  1. Nosql简介 Redis,Memchche,MongoDb的区别
  2. MongoDB与Redis的比较
  3. MongoDB和Redis区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php数据库中数据查询

MySQL查询语句mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc 区别用法: mysql_fetch_row,这个函数是从结果集中取一行作为枚举数据,从和指定的结果标识关联的结果集中取得一行数据并作为数…

C#类的继承和修饰符

C#类的继承 继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。 所有的类都是直接或则简洁的继承object 修饰符 static构造方法

经典的卷积神经网络简介

引言本文主要用于对7个经典卷积神经网络的初识,大致了解各个网络提出的背景,以及各自对卷积神经网络发展的作用(即网络的特点)。 经典的卷积神经网络:LeNetAlexNetZF NetVGGGoogLeNetResNetDenseNet参考: C…

C#中的运算符和异常处理

C#中的运算符 运算符的声明 异常处理 try表示试图进行某件事 catch表示发送了某件异常时,进行某件事 finally最终进行某件事 抛出异常

C#中的程序成分总结

C#中的程序成分 编译预处理 程序的组织 名称空间 嵌套类型 程序集 语法小结 类型的声明 类的成员

iOS开发的学习笔记

引言之前做过半年的iOS开发,从完全不懂的移动开发的菜鸟,到完成前端UI开发的菜鸟,做的一些笔记,希望对大家有用,也希望这些总结的东西对以后会有作用。 开发环境iOS的系统框架分为四个层次:核心操作系统层&…

国际人工智能算法与应用研讨会(WASA 2018)参会笔记

从博士师兄那里知道就在天津高新区有这个会议,就跟着师兄报名了,下面是参会第一天的感想。 背景WASA是人工智能领域的国际性大型会议,也是中国计算机学会(CCF)推荐的会议。旨在为人工智能研究者、开发者和企业提供一个…

C#类型转换和常用类

C#类型转换 任何事物都是对象 表达式中的类型转换 强制类型装换 普通类型装换 基本类型 数与字符串的转换 常用类(类都有方法)

机器学习标签编码

二值编码独热编码定义 :One-Hot Encoding即One-Hot 编码,也称独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有…

c#数组和集合

c#数组和集合 数组 集合 遍历它 foreach只能取得元素,不能修改元素 另一个例子 遍历它

数据结构与算法(一)——排序

虽然之前学过数据结构,但是已时隔四年,大概四月份复习了一遍,但是很多概念也是一知半解,所以重新整理知识点和运行代码的方式来巩固知识。 引言排序:是计算机程序设计中的一种重要操作,功能是将一个数据元素…

PHP(四)——性能优化

之前基于PHP开发的过程中,一直没有涉及到PHP性能优化的问题,但是一般来说PHP性能问题占整个项目性能问题一般占30%-50%部分,所以说,这部分内容是非常重要的。下面是最近自己PHP性能优化学习的资料整理。 引言[1]PHP存在性能问题的…

C#常用的算法

C#常用的算法 遍试算法 迭代算法 递归 递归算法的基本思想:分而治之

kaggle使用笔记

因为参加了DCASE2018比赛的声学场景分类的子任务,这个比赛有个排行榜是用的kaggle来做的,所以在比赛中,用到过kaggle API,下面是关于kaggle的使用笔记。 kaggle 是什么?Kaggle是一个数据科学竞赛的平台,很多…

PHP简单功能的实现

检查一个变量是否为空empty功能返回值:若变量不存在则返回 TRUE若变量存在且其值为””、0、”0”、NULL、FALSE、 array()、var $var; 以及没有任何属性的对象,则返回 TURE若变量存在且值不为””、0、”0”、NULL、FALSE、 array()、var $var; 以及没有…

C#流和文件

C#流和文件 文件及文件夹管理 WinForm中的文件对话框 文件内容的读写 注册表操作

PHP操作MySQL数据库(连接、增删改操作)

MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法。主要是使用MySQL扩展,下面就通过归纳总结来提升。 MySQL概述MySQL 是一种在 Web 上使用的数据库系统。 MySQL 是…

互联网应届生四项职场生存技能

职场能力一:沟通力沟通力是职场最重要也是最基础的一项能力。 进入职场后,无论从事什么岗位都必然要用到沟通力这个能力项。沟通力有一个很重要的基石,就是尊重对方的时间。每一次沟通,双方其实都要投入很多时间和精力。只有懂得尊…

C#中程序错误的种类和程序的调试

C#中程序错误的种类 语法错误 运行错误 逻辑错误 程序调试的基本手段 然后运行 调试程序例子 例子2:读文件 没有找到文件 null引用就是没有进行初始化 索引超出数组界限

缓存

最近在狂补优化方面的知识,缓存也是优化的一大方向。之前关于缓存只是知道它的功能,再多不知道了,这里整理缓存相关的知识,算是优化入门吧。 相关概念缓存 是“存贮使用频繁的数据的临时地方,因为取原始数据的代价太大…