本文主要介绍一些Nosql的,以及Nosql中三个数据库Redis、 Memchache、 MongoDb的区别。以下是本文的阅读清单。
一、Nosql介绍
1.Nosql简介
2.Nosql的特点和关系数据库之间的区别
3.Redis,Memcache,MongoDb的特点和差异
4.Redis、 Memcache和MongoDB之间的区别
Nosql介绍
Nosql的全名是Not Only Sql。这个概念在早期提出并且在2009年相对较热.Nosql指的是非关系数据库,我们都使用关系数据库。就像我们常用的mysql,sqlserver一样,这些数据库一般用于存储重要信息,并且在处理普通业务时没有问题。然而,随着Internet的快速发展,传统的关系数据库无法应对超大规模,大流量和高并发性。就在这个时候,Nosql被告知了这一发展。
Nosql和关系数据库之间的区别
1.储存方法
关系数据库是表格式的,因此存储在表的行和列中。在它们之间关联协作存储很容易,并且提取数据很方便。另一方面,Nosql数据库是一个庞大的组。通常存储在数据集中,就像文档、键值对或图形结构一样。
2.存储结构
关系数据库对应于结构化数据。数据表预先定义结构(列定义),结构描述数据的形式和内容。这对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但修改这些数据更加困难。 Nosql数据库基于动态结构,使用和非结构化数据。由于Nosql数据库是动态结构,因此可以轻松适应数据类型和结构的变化。
3.存储规范
关系数据库的数据存储为了获得更高的规范性,数据被分段为最小的关系表,以避免重复并实现简化的空间利用。虽然管理非常清楚,但是当单个操作设计为多个表时,数据管理有点麻烦。虽然Nosql数据存储在平面数据集中,但数据通常可以复制。单个数据库很少分开,但作为一个整体存储,因此整个数据块更易于读写。
4.存储扩展
这可能是两者之间最大的区别,关系数据库是垂直扩展,这意味着要提高处理能力,需要使用速度更快的计算机。由于数据存储在关系表中,因此操作中的性能瓶颈可能涉及多个表,需要通过提高计算机性能来克服。虽然有很大的扩展空间,但最终会达到纵向扩张的上限。 Nosql数据库被扩展,其存储自然分布。您可以通过向资源池添加更多常见数据库服务器来共享负载。
5.查询方法
关系数据库通过结构化查询语言(我们通常称之为SQL)对数据库进行操作。 SQL支持数据库CURD操作非常强大,是业界的标准用法。 Nosql查询使用非结构化查询语言(UnQl)对块中的数据进行操作,这是非标准的。关系数据库表中的主键的概念对应于存储在Nosql中的文档的ID。关系数据库使用预定义的优化方法(例如索引)来加速查询操作,而Nosql更简单,更准确的数据访问模式。
6.事务
关系数据库遵循ACID规则(原子性、一致性、隔离、耐久性),而Nosql数据库遵循BASE原则(基本可用虚拟、软/灵活事务)(软状态)、最终一致性)。由于关系数据库中数据的高度一致性,对事务的支持非常好。关系数据库支持对事务原子性的细粒度控制,并且易于回滚事务。 Nosql数据库在CAP中是可选的(一致性、可用性、分区容差),因为基于节点的分布式系统难以完全满足,因此对事务的支持不是很好,尽管也可以使用事务。 ,但不是Nosql的闪点。
7.性能
关系数据库付出了巨大的代价,以保持数据的一致性,而读写性能相对较差。面对高并发读写性能非常差,面对海量数据,效率非常低。 Nosql存储的格式是键值类型,存储在内存中,非常容易存储,数据一致性较弱。 Nosql不需要sql解析来提高读写性能。
8.授权方法
关系数据库通常具有SQL Server,Mysql和Oracle。主流的Nosql数据库是redis,memcache和MongoDb。大多数关系数据库都是付费且昂贵且昂贵的,而Nosql数据库通常是开源的。
Redis,Memcache,MongoDb的特点和差异
Redis
优点
1.支持多种数据结构,如字符串(字符串)、列表(双链表)、字典(哈希表)、设置(设置)、 zset(排序集)、 hyperloglog(基本估计)
2.支持持久性操作,可以执行aof和rdb数据持久性到磁盘,从而执行数据备份或数据恢复等操作,更好地防止数据丢失。
3.支持通过复制进行数据复制。通过主从机制,可以实时同步复制数据,支持多级复制和增量复制。主从机制是Redis执行HA的重要手段。
4.单线程请求,所有命令都是串行执行的,在并发的情况下不需要考虑数据一致性问题。
5.支持发布/订阅消息订阅机制,可用于消息订阅和通知。
6.支持简单的交易要求,但行业使用的场景很少,并不成熟。
缺点
1.Redis只能使用单线程,性能受CPU性能的限制,因此单实例CPU每秒可达到5-6wQPS(取决于数据结构,数据大小和服务器硬件性能,日常环境中的QPS峰值约为1) – 2w左右)。
2.支持简单的交易要求,但业界使用的场景很少,不成熟,既有利也有弊。
3. Redis在字符串类型上消耗更多内存,您可以使用dict(哈希表)来压缩存储以减少内存消耗。
Memcache
优点
1.Memcached可以利用多核,单输入吞吐量极高,可以达到数十万QPS(取决于密钥、的字节大小值和服务器硬件性能,日常环境中的QPS峰值约为4 -6w)。适合最大音量。
2.支持直接配置为会话句柄。
缺点
与Redis不同,它只支持简单的键/值数据结构,而Redis支持丰富的数据类型。
2.无法持久,无法备份数据,只能用于缓存,重启后所有数据都会丢失。
3.无法执行数据同步。 MC中的数据无法迁移到其他MC实例。
4. Memcached内存分配使用Slab Allocation机制来管理内存。当值大小分布较大时,内存利用率将降低,并且当引起低利用率时仍会出现踢出问题。用户需要关注价值设计。
MongoDB
优点
1.具有更高的写入负载,MongoDB具有更高的插入速度。
2.处理大型单表时,数据表太大时很容易拆分表。
3.高可用性,设置M-S不仅方便而且速度非常快,MongoDB还可以快速实现具有、安全性和自动化的节点(数据中心)故障转移。
4.快速查询,MongoDB支持2D空间索引,如管道,因此您可以快速准确地从指定位置获取数据。 MongoDB会在启动后将数据库中的数据作为文件加载到内存中。如果内存资源非常丰富,这将大大提高数据库的查询速度。
5.非结构化数据突发,增加列数可能会在某些情况下锁定整个数据库,或者增加负载并导致性能下降。由于MongoDB的数据结构模式较弱,添加新字段不会影响旧表。整个过程将非常快。
缺点
1.不支持交易。
2. MongoDB占用太多空间。
3. MongoDB没有成熟的维护工具。
Redis、 Memcache和MongoDB之间的区别
1.性能
三者的性能相对较高,一般来说:Memcache和Redis相似,高于MongoDB。
2.方便
Memcache数据结构是单一的。
Redis更丰富,数据操作,redis更好,网络IO时间更少。
Mongodb支持丰富的数据表示,索引和大多数类似的关系数据库。支持的查询语言非常丰富。
3,存储空间
Redis在2.0版之后添加了自己的VM功能,打破了物理内存的限制;您可以设置键值的到期时间(类似于memcache)。
Memcache可以使用LRU算法修改最大可用内存。
mongoDB适合大数据存储,依靠操作系统VM进行内存管理,吃内存也很强大,服务不应该与其他服务一起使用。
4.可用性
Redis,依靠客户端实现分布式读写;主从复制,每次从节点重新连接到主节点依赖于整个快照,没有增量复制,由于性能和效率问题,所以单点问题更复杂;支持自动分片,依靠程序设置一致的哈希机制。另一种方法是使用redis自己的复制机制,使用自己的主动复制(多个存储),或者更改为增量复制(需要自己实现),一致性问题和性能权衡。Memcache本身没有数据冗余机制,也没有必要;为了防止故障,使用成熟的散列或环算法来解决由单点故障引起的抖动问题。
mongoDB支持主从,复制(内部paxos选举算法,自动故障恢复),自动分片机制,并保护客户端免受故障转移和分段机制的影响。
5.可靠性
Redis支持(快照、 AOF):取决于持久性的快照,aof增强了可靠性,同时对性能产生影响。
不支持Memcache,通常用于缓存以提高性能。
MongoDB采用了1.8版本的binlog方法来支持持久性的可靠性。
6.一致性
Memcache使用cas来确保并发方案的一致性。
redis事务支持很弱,只能保证事务中的每个操作都是连续执行的。
mongoDB不支持事务。
7.数据分析
mongoDB具有内置的数据分析功能(mapreduce),其他两个不支持。
8.应用场景
Redis:使用更小的数据量进行更多性能操作和操作。
Memcache:用于减少动态系统中的数据库负载,提高性能;进行缓存,提高性能(适合读取更多写入,对于大数据量,可以使用分片)。
MongoDB:主要解决海量数据的访问效率问题。