【Mongodb】- 知识整理

说明

Mongodb 作为 nosql 数据库的代表,和传统的 mysql 的关系型数据库不同,他的数据结构只有一种,那就是 BSON,没有固定的 schema,所以他是 no schema 的数据存储方式。

需要注意的是,Mongodb 只支持单文档事务,所以用到的业务中不应该有事务性强的数据源。

这么说比较直白。具体举例几个应用场景:

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

  • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。

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

等等

Mongodb 的优势

  1. 更高的写负载
    默认情况下,对比事务安全,MongoDB 更关注高的插入速度。如果你需要加载大量低价值的业务数据,比如日志收集,那么 MongoDB 将很适合你的用例,但是必须避免在要求高事务安全的情景下使用 MongoDB,比如一个 1000 万美元的交易。

  2. 处理很大的规模的单表:
    数据库扩展是非常有挑战性的,当单表格大小达到 5-10GB 时,MySQL 表格性能会毫无疑问的降低。如果你需要分片并且分割你的数据库,MongoDB 将很容易实现这一点。

  3. 不可靠环境保证高可用性
    设置副本集(主-从服务器设置)不仅方便而且很快,此外,使用 MongoDB 还可以快速、安全及自动化的实现节点(或数据中心)故障转移。

  4. 使用基于位置的数据查询,查的更快
    MongoDB 支持二维空间索引,比如管道,因此可以快速及精确的从指定位置获取数据。
    MongoDB 在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的 I/O 效率比磁盘高多了

  5. 非结构化数据的爆发增长
    增加列在有些情况下可能锁定整个数据表,或者增加负载从而导致性能下降,这个问题通常发生在表格大于 1GB 的情况下。鉴于 MongoDB 的弱数据结构模式,添加 1 个新字段不会对旧表格有任何影响,整个过程会非常快速;因此,在应用程序发生改变时,你不需要专门的 1 个 DBA 去修改数据库模式。

总结

  • 动态查询

  • 全索引支持,扩展到内部对象和内嵌数组

  • 查询记录分析

  • 快速,就地更新

  • 高效存储二进制大对象 (比如照片和视频)

  • 复制和故障切换支持

  • Auto- Sharding 自动分片支持云级扩展性

  • MapReduce 支持复杂聚合

  • 商业支持,培训和咨询

缺点:

  • 不支持复杂的真正的事务

  • 不支持多表联查

  • MongoDB 占用空间过大