首页 > NoSQL数据库如何选型
头像
linux地平线
发布于 2021-09-17 16:00
+ 关注

NoSQL数据库如何选型

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

一、数据模型:

  • NoSQL数据模型包括键值、宽列、图形、文档等,与关系型数据库使用的数据结构不同。具有高扩展性,弱一致性,* 适合分布式环境的特点。常见的数据模型,如下:
  • 文档型:MongoDB,适合数据快速采集,以及数据分析。以MongoDB为例,索引结构和内存加载量大特性就很好的支持数据分析。
  • KV型:Memcache,键值存储适合应用程序中通过多个进程或微服务持续共享数据。现在用得少
  • 复杂KV型:Redis,键值存储适合应用程序中通过多个进程或微服务持续共享数据。
  • 图形:适合做距离计算,欺诈检测或者关联结构评估进行深层关系分析。
  • 宽列:适合非常快的速度收集数据,并在大量的数据中进行分析。

    二、存储特性上

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

    三、常见NoSql数据库

    目前在市场上有超过24个开源和商业NoSQL数据库

    MongoDB

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

    优势:

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

    局限性:

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

    2. Memcache

  • 对性能要求极致,不担心数据丢失的选择Memcache。

    优势:

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

    局限性:

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

    3. Redis](https://github.com/0voice/newsql_nosql_library#nav_sec3_chapter1_01)

  • 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收购)

全部评论

(0) 回帖
加载中...
话题 回帖