MongoDb与Postgres分析笔记

作者: WANGGGGG | 来源:发表于2020-01-16 11:10 被阅读0次

    MongoDb与Postgres分析笔记

    前言

    postgres是我步入社会接触到的第一款关系型数据库,同时具有免费的客户端工具,使用方便(我还为它做过一个简单的客户端工具)。而MongoDB是我步入社会后接触到的第一款非关系型型数据库,”非关系“这个关键词让刚步入社会的我很难理解,由于我是理科生,一上来就对这个关系型和非关系型做了1和0的区分,无形之中就增加了理解难度,同时增加了我对它的畏惧感。
    这里我奉上对于这个“非关系型”的个人理解:我认为非关系型数据库不是站在关系型数据库的对立面,非关系型数据库,不是说他不能存放关系型数据,而是它不仅仅可以存放非关系型数据。然后它的每条数据可以是不对齐的形式,不像关系型数据库,预先就需要定死表字段,这正是它的优势,不需要预先界定格式,更加灵活,可扩展性也更强。

    简介

    mongoDB简介

    MongoDB是一个通用的、基于文档的分布式数据库,为现代应用程序开发人员和云时代构建。MongoDB将数据存储在类似json的文档中。我们相信这是考虑数据最自然的方式,比传统的行/列模型更有表现力和更强大。

    postgres简介

    postgrSQL是一个功能强大、开源的关系型数据库系统,经过30多年的积极开发,在可靠性、健壮性和性能方面赢得了很高的声誉。

    功能与特点

    mongo的功能与特点

    1.MongoDB使用BSON数据格式存储记录,BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
    2.MongoDB是SSPL的开源协议,由C++编写完成。
    3.MongoDB支持水平扩展,它能自动完成分片工作,不需要人为介入,并且当各个分片中数据不平衡时,能够自动完成数据重分布,分片就是将数据存储到多台机器中,使用分片来使数据横向存储支持大规模的数据集部署和支持负载均衡提高吞吐量。
    4.MongoDB不支持Collection的关联查询
    5.事务关系支持薄弱。这也是所有NoSQL数据库共同的缺陷,不过NoSQL并不是为了事务关系而设计的,具体应用还是要跟需求去切合
    6.MongoDB一方面在方便开发者的同时,另一方面对运维人员却提出了相当多的要求。业界并没有成熟的MongoDB运维经验,MongoDB中数据的存放格式也很随意,MongoDB的客户端工具不如传统数据库的客户端完善,等等问题都对运维人员的考验。
    7.MongoDB采用预分配的形式,数据文件从64M开始,每增加一个文件大小翻倍,直到2G(64M, 128M, 256M, 512M, 1G, 2G, 2G, ...)
    8.MongoDB会在数据删除后继续保持空记录的空间,它可以再次利用它,但不是将这个空间返还给系统。
    9.mongoDB将索引和热数据保存在缓存中用以加速查询,但也导致了需要更多的内存。
    9.MongoDB存储引擎目前有三种:mmapv1、wiretiger、mongorocks(还未了解过),mmapv1在原有基础上将锁粒度由库级锁改成了集合级别的锁,依旧在数据库级别分配文件,数据库中的所有集合和索引都混合存储在数据库文件中,所以磁盘空间无法及时自动回收的问题如故;WiredTiger 通过MVCC实现文档级别的并发控制,即文档级别锁。这就允许多个客户端请求同时更新一个集合内存的多个文档,再也不需要在排队等待库级别的写锁。这在提升数据库读写性能的同时,大大提高了系统的并发处理能力。
    10.mongoDB不适合建立太多的索引,mongoDB占用内存在保存索引和热数据,如果索引太多会导致内存占用过多,索引太差又会影响查询性能,所以按照各个字段检索密集的业务还是需要斟酌一下采用它。

    postgres的功能与特点

    1.postgresql采用的是BSD协议,开源自由度高,方便用户进行自定义二次开发。
    2.并行处理
    (1)max_work_processes 当前数据库集群允许启动多少个工作进程。
    (2)max_parallel_workers 查询时允许使用的最大的线程数量。
    (3)max_parallel_workers_per_gather 顾名思义,每个查询支持的最大并行workers
    (4)max_parallel_maintenance_workers 支持内建的过程使用并行的方式工作,例如建立索引,默认设置为2
    3.支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型
    4.PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。
    5.支持表分区,表继承
    6.拥有原生的免费客户端工具,方便数据查看和调试。
    7.PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型。

    主要差异

    (1)mongoDB的可扩展性比postgresql强。
    (2)postgresql属于传统关系型数据库,事务能力强,支持sql查询,对于传统项目的支持更为友好
    (3)postgresql支持多表联合查询,mongoDB不支持多Collection联合查询
    (4)MongoDB能充分利用机器的内存资源。如果机器的内存资源丰富的话,MongoDB的查询效率会快很多,相比较postgresql,MongoDB数据库更适合那些读作业较重的任务模型。
    (5)postgresql用的是BSD协议,对于企业来说使用自由度更高,可有效降低成本。
    (6)postgresql对于运维的支持比mongodb要更友好,因为postgresql虽然不灵活,但是可以拥有更多的描述性内容。
    (7)postgresql的客户端工具比mongoDB更加丰富

    结论

    在传统项目中,postgresql还是有很强的竞争力的,如果服务器内存有限,对于读数据的性能要求不是很高,且需要根据大量字段进行查询的话

    相关文章

      网友评论

        本文标题:MongoDb与Postgres分析笔记

        本文链接:https://www.haomeiwen.com/subject/kmlfzctx.html