我是靠谱客的博主 认真银耳汤,最近开发中收集的这篇文章主要介绍NoSQL数据库如何选型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

     NoSQL数据库在体系结构和功能上各不相同,整体来说,NoSQL数据库选型需要从数据模型和存储特性两方面综合考虑。

一、数据模型:


      NoSQL数据模型包括键值、宽列、图形、文档等,与关系型数据库使用的数据结构不同。具有高扩展性,弱一致性,适合分布式环境的特点。常见的数据模型,如下:

  • 文档型:MongoDB,适合数据快速采集,以及数据分析。以MongoDB为例,索引结构和内存加载量大特性就很好的支持数据分析。
  • KV型:Memcache,键值存储适合应用程序中通过多个进程或微服务持续共享数据。
  • 复杂KV型:Redis,键值存储适合应用程序中通过多个进程或微服务持续共享数据。
  • 图形:适合做距离计算,欺诈检测或者关联结构评估进行深层关系分析。
  • 宽列:适合非常快的速度收集数据,并在大量的数据中进行分析。

二、存储特性上

 

  • 持久化需求高数据量大,作为核心数据源,或者有轻度计算需求的:MongoDB
  • 对性能要求极致,不担心数据丢失的选择:Memcache
  • 数据生命周期短,数据量相对小,性能要求高:Redis

三、常见NoSql数据库


        目前在市场上有超过24个开源和商业NoSQL数据库
1.MongoDB
       MongoDB面向文档存储,可以存放xml、json、bjson等文档类型。适合持久化需求高数据量大,作为核心数据源,或者有轻度计算需求的适合选用MongoDB。
MongoDB的常见用例包括个性化,实时分析,物联网(IoT),大数据,产品/资产目录,安全和欺诈检测,移动应用程序,数据中心,内容管理以及社交和协作应用程序。
优势:

  1. 面向文档,可以存放xml、json、bjson等文档类型。
  2. 使用GridFS机制,将大文件分隔成多个小文档存放,因此可以存放大体积文件。
  3. 采用预分配空间的方式来防止文件碎片,减少空间浪费。
  4. 内存型数据库,数据操作会先写入内存,然后再会持久化到硬盘中去。
  5. 支持动态查询,支持完全索引,包含内部对象

局限性:

  1. mongodb不支持事务操作。
  2. mongodb占用空间过大。空间预分配机制,为避免形成过多的硬盘碎片,mongodb每次空间不足时都会申请生成一大块的硬盘空间。
  3. 字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON的形式存储。

2.Memcache
        对性能要求极致,不担心数据丢失的选择Memcache。
优势:

  • Memcached利用多核优势,单实例吞吐量极高,可以达到几十万QPS。
  • 支持直接配置为session handle。

局限性:

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

3.Redis
        Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,适合数据生命周期短,数据量相对小,性能要求高操作很频繁。
优势:

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

局限性:

  • 单线程,性能受限于CPU性能,单实例最高QPS才可能达到6w左右(稳定工作下QPS2W左右)。
  • 支持简单的事务,但是商不成熟。
  • Redis在string类型上会消耗较多内存。
  • 不支持复杂查询,数据使用形式只限于key-value.

四、其他NoSQL选项


其他开源和商业NoSQL数据库产品包括:

Blazegraph(来自Systap)
Google BigQuery(来自Google)
Helium(Levyx)
Microsoft Azure Cosmos DB,
Neo4j
Oracle NoSQL数据库
Riak KV(来自Basho)
ThingSpan(来自Objectivity)
Titan(来自Aurelius,后被DataStax收购)

最后

以上就是认真银耳汤为你收集整理的NoSQL数据库如何选型的全部内容,希望文章能够帮你解决NoSQL数据库如何选型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部