目录

什么是NoSql

NoSQL,指的是非关系型的数据库,可以很容易的访问和抓取数据。

用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。

NoSql优势与不足

  • 优点

    • 1、高可扩展性
    • 2、分布式计算
    • 3、低成本
    • 4、架构的灵活性,半结构化数据
    • 5、没有复杂的关系
  • 不足

    • 1、没有标准化
    • 2、有限的查询功能
    • 3、最终一致是不直观的程序

MongoDB优点

  • 事务支持。MongoDB只支持单文档事务,复杂的事务场景支持不佳
  • 灵活。BSON存储结构
  • 运维简单,故障自动切换
  • 可扩展分片集群
  • 高性能引擎。WiredTiger
  • 强大索引支持。地位位置索引支持地理位置范围计算与查询、文本索引解决搜索需求、TTL索引解决历史数据自动过期
  • 支持文件存储
  • 支持aggregation与MapReduce。解决数据分析场景需求,可以自己写查询语句或脚本将请求分发到MongoDB上完成。

MongoDB使用的业务场景

  • 应用服务器的日志记录

    日常我们会把一些应用日志存储到文本格式的文件中,这样不便于查看同时也不便于统计等。通过MongoDB存储,既可以很好的存储、统计同时也方便不同的业务场景下日志数据格式不一致等情况。

  • 第三方信息的抓取与存储

    我们在一些业务场景中难免会去使用到第三方的数据,当接入多个第三方平台时,这时候我们需要考虑到每个平台数据格式不一致,自身的存储系统结构设计等情况。这时候我们使用MongoDB来存储就很好的避免了这个问题。

  • 运维监控系统

    在一些大型的项目中,监控是必不可少的。监控系统要监控的内容,可能是随时多变的,这时候使用MongoDB就体现了很大的便利。不需要去修改数据库的结构,直接根据业务需要灵活调整即可。大大降低了开发成本。

  • O2O业务场景

    将送快递骑手、快递商家的信息(包含位置信息)存储在 MongoDB,然后通过 MongoDB 的地理位置查询,这样很方便的实现了查找附近的商家、骑手等功能。

  • 游戏业务场景

    使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。

  • 社交业务场景

    使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

  • 物联网业务场景

    使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

  • 视频直播业务场景

    视频直播,使用 MongoDB 存储用户信息、礼物信息等。

  • 大数据应用

    使用云数据库MongoDB作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。

    MongoDB提供二级索引功能满足动态查询的需求,利用MongoDB的map-reduce聚合框架进行多维度的数据分析。

MongoDB使用场景类型总结

  • 读写分离应用

  • 灵活多变的业务场景

    MongoDB采用No-Schema的方式,免去表结构变更的痛苦,非常适用于初创型的业务需求。可以将模式固定的结构化数据存储在mysql中,模式灵活的业务存储在MongoDB中,高热数据存储在Redis或Memcache中,实现对业务数据高效存取,降低存储数据的投入成本。

  • 移动应用

    MongoDB支持二维空间索引,可以很好地支撑基于位置查询的移动类App的业务需求。同时MongoDB动态模式存储方式也非常适合存储多重系统的异构数据,满足移动App应用的需求。

  • 物联网应用

    MongoDB具有高性能和异步数据写入功能,特定场景下可达到内存数据库的处理能力。同时,库MongoDB中的分片集群实例,可按需配置Mongos和Shard组件的配置和个数,性能及存储空间可实现无限扩展,非常适合物联网高并发写入的场景。

    MongoDB提供二级索引功能满足动态查询的需求,利用MongoDB的map-reduce聚合框架进行多维度的数据分析。

mysql与mongodb

在处理大量数据方面,MongoDB 比 MySQL 更胜一筹;在云计算服务和需求频繁变化的项目上,MongoDB 也更具优势。

MySQL数据结构和模式是固定的,因此保证了数据一致性和可靠性。MySQL还有一个好处,就是由于它支持基于 ACID 准则的事务操作,数据安全性更高。所以对于看重这些因素的项目来说,MySQL 是最合适的。

参考

Aggregation — MongoDB Manual

[译]MongoDB 和 MySQL 使用场景分析 - 掘金