常见的关系型数据库与非关系型数据库对比详解。

1、 数据库分为关系型数据库和非关系型数据库。

关系型数据库(一表或多表)

  • Oracle:是一个开放式商品化关系型数据库管理系统
  • DB2:应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下
  • Microsoft SQL Server:全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。
  • MySQL:是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。(常用)

非关系型数据库(key->value)

  • MongoDB:是一个面向文档的开源NoSQL数据库。(常用)
  • Redis:是最著名的键值存储。Redis是用C语言编写的。它是根据BSD授权的。(常用)
  • Memcached:是一个开源、高性能、分布式内存缓存系统,旨在通过减少数据库负载来加速动态web应用程序。(常用)
  • Cassandra:Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。
  • HBase:是谷歌为BigTable数据库设计的分布式非关系数据库。
  • Neo4j:称为原生图数据库,因为它有效地实现了属性图模型,一直到存储层。
  • Oracle NoSQL:实现了从用户定义的键到不透明数据项的映射。
  • Amazon DynamoDB:使用了一个NoSQL数据库模型,它是非关系型的,允许文档、图形和列在它的数据模型之间。
  • Couchbase:是一个用于交互式web应用程序的NoSQL文档数据库。它具有灵活的数据模型,易于扩展,提供一致的高性能。
  • CouchDB:是一个开源的NoSQL数据库,使用JSON存储信息,JavaScript作为查询语言。

2、关系型与非关系型数据库对比

关系型数据库

优点

  • 复杂查询:可以在一表或者多表之间做非常复杂的数据查询(join链表查询,where)
  • 一致性:事务处理数据对数据安全性能很高,冗余低,数据完整性好。
  • 容易理解:逻辑类似常见的表格的方式展现出来。

缺点

  • 每次操作都要进行SQL语句的解析,消耗较大
  • 对于高并发项目无法满足需求,读写能力不足
  • 进行加锁操作的时候,造成数据库的负担。
  • 存储数据的不灵活。比如多表存储的时候。
非关系型数据库

优点

  • 高并发,读写能力强
  • 弱化数据数据结构一致性,更加灵活
  • 扩展性高

缺点

  • 没有SQL语句通用好
  • 操作灵活,但容易出现错乱喝混乱
  • 没有外键关联等复杂的操作

3、常用的数据库对比(MySQL,MongoDB,Redis,Memcached)

  1. mysql(关系型数据库) 存久持久化数据,将数据存放在硬盘中,读取速度慢,每次请求访问数据库是都存在I/O操作,反复频繁的访问数据库,反复链接数据库花费大量时间,导致运行效率过慢,负载过高。从而衍生了缓存的概念,当浏览器请求的时候,首先在缓存中查找,如果存在就获取,不存在就访问数据库。
  2. . mongDB(NoSQL数据库) 是介于关系型与非关系型数据库的之间的的产品,是分布式文件存储的数据库。他支持结构非常松散,可以存储比价复杂的数据类型,其查询的语法有点类似于面向对象的查询语言,还支持数据建立索引。
  3. Redis(内存数据库) 是以key-value存储方式的存储系统(分布式内缓存)。支持存储value类型更多包含string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。redis为了保证效率,数据缓存在内存中。redis周期性将更新的输入写入磁盘或者把修改操作写入追加的记录文件,并在基础上实现master-slave(主从同步)
  4. Memcached(内存cache)是一个到性能的分布式对象缓存系统,动态web应用可以减轻数据库的负载。为了加速访问速度,在内存中建立内存缓存数据,减少读写磁盘的次数和保证数据的更新。

4、MySQL,MongoDB,Redis,Memcached的特点

  • MySQL
    1、支持多线程,充分利用CPU的资源,优化SQL语句有效提成查询效率
    2、提供做种链接数据库方式,便于管理检查。
    3、大型数据库,尅处理拥有上万条的大型数据
    4、支持多中方式存储引擎
    5、事务处理数据,保证数据的一致和安全性

  • MongoDB
    1、可以把不同的结构文档存储在同一数据库里
    2、面向集合的存储,Json格式
    3.、支持索引
    4、支持主从模式,服务器之间数据复制,支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制;
    5、支持水平数据库集群
    6、不支持事务,,采用binlog方式保证数据的持久的可靠性。

  • Redis
    1、支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段;
    2、单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题;
    3、通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制, master-slave机制是Redis进行HA的重要手段;
    4、Redis事务支持比较弱,只能保证事务中的每个操作连续执行。

  • Memcached
    1、可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS。
    2、支持配置session
    3、只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型;
    4、无法支持数据持久化,数据不能备份,只用于缓存,服务重启,数据会全部丢失。

5、MySQL,MongoDB,Redis,Memcached的应用场景

MySQL:高度事务性的系统。例如银行或者会计系统。web网站系统,日志记录系统,数据仓库系统。
MongoDB

  • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
  • 物流场景,使用 MongoDB存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
  • 社交场景,使用 MongoDB存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
  • 物联网场景,使用 MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
  • 视频直播,使用 MongoDB 存储用户信息、礼物信息等

Redis

  1. 用来做缓存-redis的所有数据时放在内存中的
  2. 可以在某些特定应用场景下替代传统数据库–比如社交类的应用
  3. 在一些大型系统中,巧妙的实现一些特定的功能:session共享、购物车
  4. .适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

Memcached

  1. 动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等);
  2. 用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)。

5、MySQL,MongoDB,Redis,Memcached实战案例

Mysql网上百度一下一下就有很多。

MongoDB

//记得先配置链接数据库
  Db::connect('mongodb')
            ->table('user_info')
            ->where(['uid'=>['=',1]])
            ->update();
       //参考:https://www.cnblogs.com/codeninja/p/14817064.html

Redis

//记得先配置链接数据库
$redis = new Redis();
 $redis->handler()->append('demo','    bbbj47848487bbbb');
 //参考:https://blog.csdn.net/qq_27517377/article/details/85693281

Memcached

$memcache = new Memcache;             //创建一个memcache对象
$memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器
$memcache->set('key', 'test');        //设置一个变量到内存中,名称是key 值是test
$get_value = $memcache->get('key');   //从内存中取出key的值
echo $get_value;

你可能感兴趣的:(Redis,MySQL,Memcached)