通俗地说,MongoDB 驱动程序是什么?

What is a MongoDB driver in layman's terms?

我一直在搜索 MongoDB 文档、Google、Whosebug 和 YouTube...但我似乎仍然无法理解 驱动程序的用途在 MongoDB 中。

我知道不同的编程语言可以有一个或多个不同的驱动程序 - 但为什么我需要一个?

严格来说,你不需要,但另一种方法是手动构建网络数据包,分散在你的代码库中......术语'driver'是一个有点恼人,因为大多数人都期望一些内核级程序与硬件对话。

MongoDB 驱动程序更像是一个 SDK 或帮助程序库,可以帮助您完成许多您在使用 MongoDB 时几乎肯定需要解决的任务。

本质上,MongoDB 驱动程序会做这些事情:

  1. 它实现了用于与数据库对话的MongoDB wire protocol,即它知道'messages'数据库期望什么,它知道相关常量等。'It implements the MongoDB API' 如果你愿意的话。

  2. 它还附带管理实际TCP/IP套接字的助手,创建套接字,解析副本集地址,实现连接池等

  3. 接下来,驱动程序包含帮助程序,可以更轻松地使用您的语言中的 BSON 数据类型,因为通常没有 1:1 类型映射。例如,mongodb 数组可以映射到大多数语言中的数组或某种列表或集合容器; ObjectIdISODate 可能需要包装器,依此类推。

  4. 最后,驱动实现了一个序列化器,也就是一个可以创建实例副本'from the outside'的软件,即是,您不必在每个要存储的 class(或您的语言支持的任何概念)上实现 Serialize() 方法。与 3) 一起写入数据的 BSON 表示。

序列化本身并不简单,因为必须很快处理循环引用,因此需要对一组未知属性使用递归算法。如果这听起来还不够复杂,那么对象的反序列化(或水化)就更痛苦了,所以它并不是编写超级有益的代码类型,除非它具有高度可重用性。

我确定我忘记了驱动程序做的其他事情,但我认为这些是他们解决的关键痛点。据我所知,它们的确切功能集因语言而异,在某些语言中,个别问题可能不太明显或更明显,但它们通常无处不在。