【网站架构】NoSQL介绍,分类及使用场景

非关系型数据库有很多,例如redis、hbase、mogodb、neo4J等 ,导致很多人搞不清楚什么场景用什么样的非关系型数据库。

本期,我们就来聊一下非关系型数据库 ,介绍非关系型数据库的类型分类以及各应用场景。

 非关系型数据库是相对表格形式的数据库(MySQL、Oracle)而言的, 简单地说 ,只要不是表格形式的数据库都可以称为非关系型数据库(NoSQL)。

为什么需要使用非关系型数据库

那么我们先讨论一个问题, 理论上数据库(MySQL、Oracle)就能满足所有的业务需求了 ,为什么还需要非关系型数据库呢?

主要有两个原因:

  1. 性能问题,如果数据读写都完全依赖数据库的话,网站系统的性能会很差

  2. 业务场景受限,数据库受限于表格形式的局限,在一些如好友关系等关系复杂的数据场景下是乏力的 

非关系型数据库的分类​​​

非关系型数据库虽然有很多具体软件 ,但是按照存储类型分的话,只有4类,下面也将对其分别介绍。

  1. 键值存储非关系型数据库,如Redis、Memcache等;​

  2. 列存储非关系型数据库,如HBase、Cassandra等 ;

  3. 文档型非关系型数据库,如MongoDB、CouchDB等 ;

  4. ​图形非关系型数据库,如Neo4J、InfoGrid等 ​。   

键值存储型非关系型数据库

其存储的数据形式一般是键值对(Key-Value),如Redis、Memcache等。

就数据的存储形式(Key-Valve)而言, 确实无特别之处,MySQL完全可以胜任这样的数据储。

但这类型非关系型数据库一般也是内存型数据库(如Redis、Memcache等),也就是它们的数据都存在内存当中 ,磁盘存储一般只作为备份(部分不支持磁盘备份)。

这里我们以比较流行的Redis展开讨论, Redis的数据存储在内存当中,数据操作直接对内存进行操作, 所以它的性能非常高,大概1秒能处理10万请求(性能调优后)。

Redis的优势在于其性能上, 所以一般作为降低MySQL等数据库压力的主要手段 ,如降低数据库的读频率、降低数据库的写频率等缓存机制。

这类缓存机制让网站系统的性能有明显的提高,几乎是每个大型网站系统必备的, 缓存机制的具体实现后续将会出专门的一期内容介绍 。

以上列存储非关系型数据库的优点只有在海量数据的前提下才会显现出来。

另外,一般列存储非关系型数据库不适合随机更新(更新的消耗较大),不支持事务回滚。

​所以,列存储非关系型数据库一般只适合存储一些数据量大、几乎不更新、查询时条件较少的数据, 如用户画像数据、聊天记录等。

列存储非关系型数据库

列存储非关系型数据库,例如HBase、Cassandra等。

与MySQL等数据库的区别是:MySQL等数据库是按行存储的, HBase等列存储非关系型数据库是按列存储的。

按列存储数据的方式有两个好处 :

  1. 高效的存储空间利用率,由于一列内的数据的业务类型是一致的,理论存在很多相同的数据,以列存储数据可以更高效地压缩数据;例如某列数据存的是身高数据,则相同的数据,如170cm都可以进行压缩。

  2. 当搜索条件较少时,查询效率高,因为数据是按列存储的,可以通过指定列数据快速获取数据所在的位置。例如,“获取李四的身高”这个查询,查询过程不需要遍历所有的数据,在“姓名列”中找到张三处在第二行,然后在“身高列”直接获取第二行数据则为“李四的身高”。

以上列存储非关系型数据库的优点只有在海量数据的前提下才会显现出来。

另外,一般列存储非关系型数据库不适合随机更新(更新的消耗较大),不支持事务回滚。

所以,列存储非关系型数据库一般只适合存储一些数据量大、几乎不更新、查询时条件较少的数据, 如用户画像数据、聊天记录等。

图形非关系型数据库

图形非关系型数据库,这里的图形并不是图片 ,而是图数据结构。图形非关系型数据库如Neo4J、InfoGrid等。

以好友关系为例,理论上MySQL也可以存储 但是随着用户基数越来越多,则好友关系会越来越复杂。

所以,在存储数据量大,且关系复杂的数据时 ,如社交好友关系等数据 一般用图形非关系型数据库。

总结

以上就是非关系型数据库的相关介绍。

非关系型数据库与关系型数据库(MySQL等)之间,多个非关系型数据库之间,都并不是排他的关系 ,而是相辅相成的关系。

当然,我们只从数据结构上对非关系型数据库进行分类, 而具体选择哪个非关系型数据库 ,更多的是根据具体功能场景、某些特殊要求而定。

如同时文档型非关系型数据库, 如果是数据管理,则MongoDB更合适 ,如果是数据检索,则ElasticSearch更合适。

后续,随着介绍某些特殊机制(如缓存机制、全文检索等)。我们会更加深入地介绍相关的非关系型数据库。

最后,我们想明确一个观念 ,并不是使用了Redis、MongoDB、Neo4J等软件就是先进的系统,胡乱堆砌这些软件只会让系统变得糟糕。按需要合理地使用这些软件才会让系统质量更高,而非一些无关紧要的原因而盲目使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值