mongodb适用和不适用的应用场景

       近期考虑把订单历史数据从Oracle数据库迁移到Nosql数据库做历史数据查询和分析,一天千万级数据。打算使用mongodb数据库。使用nodejs做查询和统计API,对并发请求量要求低,不知道有没有前辈这样玩过。我们如今仅仅用mongodo存储日志数据,做应用故障分析用。

假设有前辈做个类似的历史库查询和数据分析,能够交流下。你们选择的Nosql库和上层开发语言。


1.mongodb介绍

    MongoDB (名称来自"humongous") 是一个可扩展的高性能。开源,模式自由,面向文档的数据库。

它使用C++编写。MongoDB特点:

  a.面向集合的存储:适合存储对象及JSON形式的数据。

  b.动态查询:mongo支持丰富的查询表达方式。查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组。

  c.完整的索引支持:包含文档内嵌对象及数组。mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。

  d.查询监视:mongo包括一个监视工具用于分析数据库操作性能。

  e.复制及自己主动故障转移:mongo数据库支持server之间的数据复制,支持主-从模式及server之间的相互复制。

复制的主要目的是提供冗余及自己主动故障转移。

  f.高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。

  g.自己主动分片以支持云级别的伸缩性:自己主动分片功能支持水平的数据库集群,可动态加入额外的机器。


2.mongo使用场合

    mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。mongo适用于下面场景:

  a.站点数据:mongo很适合实时的插入,更新与查询,并具备站点实时数据存储所需的复制及高度伸缩性。

  b.缓存:因为性能非常高,mongo也适合作为信息基础设施的缓存层。在系统重新启动之后。由mongo搭建的持久化缓存能够避免下层的数据源过载。

  c.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比較贵,在此之前。非常多程序猿往往会选择传统的文件进行存储。

  d.高伸缩性的场景:mongo很适合由数十或者数百台server组成的数据库。

  e.用于对象及JSON数据的存储:mongo的BSON数据格式很适合文档格式化的存储及查询。

不适合的场景:

  a.高度事物性的系统:比如银行或会计系统。传统的关系型数据库眼下还是更适用于须要大量原子性复杂事务的应用程序。

  b.传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。

对于此类应用,数据仓库可能是更合适的选择。

  c.须要SQL的问题。

posted @ 2017-06-13 19:05  yfceshi  阅读(2552)  评论(0编辑  收藏  举报