提到JSON 的数据处理,大部分人想到的一定是MONGODB ,如果不是可以自己好好的反思一下,自己的数据库餐盘是不是缺少MOGNODB 这道硬菜,最近也有人问我一个问题,关于使用mongodb的原因是什么,我回答的比较简单,但是我更原因用这样的方式来回答这个问题。
提到MOGNODB 的特长,必须提到JSON ,在数据库处理的格式中,我们大多习惯关系型的数据的表达方式,而在除了数据关系型的二维表格的数据表达的方式以外,更加简便的流行的数据格式的表达是 JSON ,JSON,即JavaScript对象表示法,是一种易于人类阅读的数据交换格式,尽管JSON是基于JavaScript编程语言标准的一个子集,但它完全独立于语言。
JSON对象是关联容器,其中字符串键映射到一个值(可以是数字、字符串、布尔值、数组、空值——null,甚至是另一个对象)。几乎所有编程语言都有这种抽象数据结构的实现——JavaScript中的对象、Python中的字典、Java和C#中的哈希表、C++中的关联数组等。JSON对象易于人类理解,也便于机器解析和生成。所以在很多的情况下,程序人员更习惯于JSON 来进行数据的传输和数据的处理。基于数据库格式的发展,JSON数据的已经应用到,更多的领域如APIs 配置文件 日志信息 数据库信息存储。基于这样的应用的广泛性,我们才有了使用MOGNODB 的初始的物质基础。
这是其一,其二是传统数据库的无能,这个词可能用的不是太好,但却是实际,的确无论是ORACLE 还是 MYSQL 到POSTGRESQL 在JSON 的处理上,都各有千秋,但只要到实际的工作中,我们大多不敢去用这些传统的数据库来处理JSON ,或者说他们这些数据库,无法给我们信任感。
1 量,量是一个MOGNODB 的特点,一个表可能有200万,5000万,1个亿 ,这些都是传统数据库可以处理的内容,但是如果我告诉你10个亿呢,100个亿呢,此时传统数据库基本上就没有了声音,留下的只有MONGODB 还可以对你这些要求进行支持。基于JSON 数据的特点,要不很小,要不很大,尤其在一些第三方的信息传输或日志的记录中,MOGNODB 存储的数据量非常大,可能每秒就是几万条数据的进入,而且是持续性的。很容易一个表就能达到成千上万的小CASE。
2 存,在数据进来后如何能存的下这些数据是另一个能力,数据被压缩的很小,这是mongodb的另一个特性,基于这个特性mongodb 通过一下的以下方式来完成这个工作:
使用BSON格式:MongoDB存储数据时采用了BSON(Binary JSON)格式,这是一种类似JSON的二进制序列化数据表示。BSON格式在保留JSON可读性的基础上,提供了更紧凑的二进制表示,有助于提高存储效率。
支持多种压缩算法:MongoDB支持多种数据压缩算法,如Snappy、zlib等。这些压缩算法能够有效降低磁盘空间占用,提高存储的压缩比。
索引压缩:MongoDB还对索引进行了压缩处理,以减少索引所占用的磁盘空间。通过压缩索引,可以提高查询效率,并节省存储空间。
分片技术:MongoDB使用分片技术将数据分布在多个服务器上。这不仅有助于水平扩展,还可以优化存储空间的利用,从而提高整体的压缩比
这些能力看似一般,但是这些能力的组合让其他的数据库基本没有了声音,因为他的确是实实在在的让你看到了结果,如同大众汽车的反向虚标,百公里加速告诉你8.7秒,但你可以跑到7秒,与一些国产车型形成了鲜明的对比。---- 不说瞎话。
3 快,这单又是MONGODB的一个特点,在传统数据库的慢查询都在1秒进行标定的时候, MONGODB 的慢查询基本在500ms,也就是说mongodb 从未把自己的数据处理能力和 传统的那些数据库进行对标,而是将自己的性能,标定在 传统数据库 和 REDIS 缓存型数据库之间的一个标定人设。所以一般我们发现 MONGODB 的数据处理速度在 500毫秒以外的情况下,优化就开始了。
4 多元化的发展,这点mongodb 还是其他的数据库的启蒙老师,当其他的数据库还在努力的在传统和云之间进行兼容的时候,包含ORACLE 一直在 oracle 和 mysql 上云进行多方努力的时候,MONGODB 的Atlas 算是他们的祖师爷了。
MongoDB Atlas 是MongoDB官方提供的一种托管式数据库服务。它让你可以方便地在主流云服务商(如Amazon Web Services、Google Cloud Platform和Microsoft Azure)上部署、管理和扩展MongoDB数据库。
MongoDB Atlas 提供了以下特点和优点:
简化部署:使用MongoDB Atlas,你可以轻松地创建和部署MongoDB数据库。图形化界面使得配置和管理变得更加简单。
自动化运维:Atlas自动处理数据库日常运维任务,如备份、修复、监控和性能调优等,让开发者可以专注于应用程序本身而无需关心数据库管理细节。
安全性:Atlas提供多层次的数据库安全保障,包括网络隔离、加密、用户认证和访问控制等。这有助于确保你的数据得到充分保护。
弹性伸缩:根据实际需要,MongoDB Atlas可以轻松地进行水平和垂直扩展。你可以按需调整集群大小和性能以满足应用程序的要求。
全球分布:Atlas支持跨区域的数据分布,以便最佳地部署你的应用程序。这有助于降低延迟,提高数据冗余,并确保高可用性。
5 更可靠和更智能的 HA 高可用和读写分离
说到这点,其他的数据库产品,尤其是那些传统的数据,基本上在这里毯子,无论你是 XX cluster 还是 streaming , 这些都无法和mognodb 的高可用相提并论,首先mongodb的高可用是非常坚固的,并且恢复的方式方法很多,速度也很快,速度与mongodb无关,与你所使用的硬件有关,只要硬件够强健,那么必然mongodb 不能让你失望。
1 实现了数据的冗余
2 实现了数据节点故障的自动迁移,并且速度极快
3 读写分离的控制可在每条数据的写入中进行设定
4 数据的写入的安全性,丰俭由人,可以针对单条数据进行设定
5 可以实现shard storage 方式中的独立分离,并且不需要中间件的支持。
以上一点单独拿出来可能并不吸引人,但是这些都组合在一起,那个数据库敢出来叫板。(包含收费的数据库)
6 多种方式的JSON 数据处理和查询多使用在哪里
在一些项目的选型上,mongodb 已经成为主角,这些应用场景主要在
1 信息沟通和交流的数据留存,在两个应用进行数据端口访问时,势必要有数据的传递,而接口和接口之间的数据传递和记录,是有一定的变化和对于信息宽度的兼容性的,并且数据本身的格式就是JSON ,所以在这个情况下,我们只能选型 mongodb 其他的数据库基本上无法胜任这个功能,尤其在数据的灵活性方面,因为二维表格的限制,导致传统数据库这方面无法被选用。
2 日志类的数据,日志是应用系统最常用的一个部分,基本上每个应用都有日志部分,可能是应用的日志,也可能是系统的日志,但这些日志的格式大多是JSON ,并且这些日志经常被添加新的部分,如果传统数据库则会非常难以进行日志的处理和写入,尤其还有表结构的变化,MOGNODB 基于灵活的无结构,在这点上又再一次让传统数据库失效。
3 对于JSON 数据的特殊修改和高速查询的需求应用
这些要求主要是基于配置信息和一些超高并发的简单查询,尤其对于一些高并发简单查询的场合,又希望整体的应用结构设计简单的场景下,mongodb 可以在没有 redis 的辅助下进行高并发的查询操作,利用多只读节点分担读压力的特性。
4 特殊场景下的需求,这点在一些工业或化工领域居多,工业设备的数据反馈也大多是多种多样的,传统数据库无法进行这方面的响应和设计,还是基于无结构化的数据处理支撑,在这方面也只能使用 mongodb来进行业务的支持。
小结:基于以上提到的一些特点,在NOSQL的世界,MONGODB 属于无可替代和必须选择的存在,在国内搞信创的同时,我们可以发现,信创中传统关系型,分布式等数据库已经是内卷严重,而在NOSQL领域,基本上我们也没有看到有潜力的国产数据库的身影,即使有,也是兼容性的,基本上也没有那个企业敢使用不可靠的产品,所以在NOSQL领域mongodb是一个独行侠,无可替代。