我已经淘到MongoDB的文档,谷歌,#1和YouTube ...但我似乎仍不能明白什么是驱动程序在MongoDB中使用。通俗地讲,MongoDB驱动程序是什么?
我知道,不同的编程语言可以有一个或多个不同的驱动程序 - 但为什么我需要吗?
我已经淘到MongoDB的文档,谷歌,#1和YouTube ...但我似乎仍不能明白什么是驱动程序在MongoDB中使用。通俗地讲,MongoDB驱动程序是什么?
我知道,不同的编程语言可以有一个或多个不同的驱动程序 - 但为什么我需要吗?
你不严格地说需要之一,但另一种方法是建立网络数据包手动代码库中的散落......术语“司机”是有点讨厌,因为大多数人期待一些内核级与硬件对话的程序。
MongoDB的驱动程序更像是一个SDK或辅助库,可以帮助你与一个数字,你几乎肯定需要解决,当你想使用MongoDB的任务。
在本质上,MongoDB的驱动程序做这些事:
它实现了用来与数据库对话的MongoDB wire protocol,即它知道什么“消息”数据库预计,它知道有关的常数,等等,如果你愿意的话,它实现了MongoDB API。
它还配备了助手来管理实际的TCP/IP套接字,创建它们,解决副本集的地址,实现连接池等
接下来,驱动程序包含助手,可以更容易的工作与来自您的语言的BSON数据类型相关联,因为通常不会有1:1的类型映射。例如,一个mongodb数组可以映射到大多数语言的数组或某种列表或集合容器; ObjectId
和ISODate
可能需要包装,等等。
最后,驱动程序实现串行,就是一个软件,它可以创建“从外部”的实例的副本,也就是无需你实现每一个Serialize()
方法每个class
(或您的语言支持的任何概念)您要存储。与3)一起,这会写入数据的BSON表示形式。
序列化本身是不平凡的,因为一个迅速必须应对的循环引用,因此需要一组未知属性的递归算法。如果这听起来不够复杂,那么对象的反序列化(或水合)就更加痛苦,所以它不是那种超级可写的代码类型,除非它是高度可重用的。
我敢肯定,我忘了别的司机做的,但我觉得这些都是他们解决关键的痛点。据我所知,它们的确切功能集因语言而异,在某些语言中,个别问题可能会更少或更明显,但它们通常存在于任何地方。
谢谢你这个真棒的答案,我现在完全理解它! – webDeverJr