说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

揭秘MongoDB最新Java驱动:更好的JVM支持,指日可期的异步

HTML文档下载 WORD文档下载 PDF文档下载
Java无疑是最受欢迎的编程语言之一,然而传了已久的MongoDB Java Driver 3.0却迟迟不肯面世。近日MongoDB Java工程师及布道者Trisha Gee解释了这一原因,并揭露了新版本驱动设计的6个目标。

或许你已经从种种渠道得知10gen JVM小组正在致力于3.0版本的Java驱动开发,然而如果你了解这项起于2012年底的项目至今却尚未完成,肯定会感叹一句“10gen的哥们,又打酱油了吧”。近日MongoDB Java工程师及布道者Trisha Gee在公司博客中撰文解释了这个原因,并为我们揭开了新版本驱动的面纱,以下为译文:

那么为什么要废如此功夫去更新驱动,我们又想达到什么目的?OK,下面看一下需求:

  • 更容易维护
  • 更容易扩展
  • 更好的支持ODM、第三方库以及其它的JVM语言
  • 给Java开发者更好的体验

不错,非常概括,基本上可以理解为驱动的全面提升,所以我们需要更切实的目标:

  • 一致性
  • 更清晰的设计
  • 直观的API
  • 容易理解的异常
  • 友好的测试
  • 向后兼容

一致性

Java开发者在使用驱动时发现了许多不一致的地方:Java驱动中的用法会不同于shell或者是其它驱动;甚至使用Java驱动时,方法命名的方式同样让人困惑(CreateIndex与ensureIndex);参数的顺序也经常不同;有时候方法被重载多次,你还是会使用method chain。虽然存在QueryBuilder,但是有许多场景下你还是需要手动的构造一个DBObject,等等。

如果你在使用这个驱动,即使你有轻微的强迫症,代码的一致性也可能让你发疯:空格的用法、花括号的位置、字段的位置、混淆的字段名称等等。有些人可能会对此不屑一顾,但是对于驱动初学者来说确实造成了不必要的困扰,同样这也意味着增加特性或者是修复bug将花费更长的时间。

更清晰的设计

其实驱动的义务非常的简单及单一,即负责Java和BSON的转换。毕竟,其根本责任就是扮演应用程序和MongoDB之间的桥梁,而做的也是将方法调用和Java对象转换成wire-protocol消息,反之亦然。不错,这是驱动本分,但绝对不是唯一。MongoDB支持横向扩展,这就意味着应用程序可能会运行在多台主机之上——可能在从节点中的一个读取数据,也可能在分片的环境中进行读取,当然也可以只有一台服务器。而驱动的目的就是让这一切对应用透明,所以它就像是在做server discovery,选择合适的服务器,并在适当的地方尝试重用连接。连接池的管理同样由其完成,还有序列化和反序列化,这里存在一个完整的连接管理模块。

驱动的作用还包括在协议和应用之间提供一个恰当的抽象级:驱动有着自己的域,而这个域需要以相同的表现形式设计——与Document、Collection、Database相同,让用户可以更加直观的使用。

显然驱动的设计目标不仅仅是为应用开发者使用。通过合适的设计,我们可以让其它的库及驱动更容易重用一些low-level代码(比如BSON协议、连接管理等),而上方使用的是自己的API——比如Spring Data、Morphia以及其它JVM语言(比如Scala)。取代将驱动作为Java开发者连接MongoDB的默认方式,我们更愿意将它设计成JVM驱动,让你可以在上面建立正确的抽象等级,因此内部构件可以更容易的为其它库重用。

为了实现这些,我们必须重新设计驱动,而核心就是围绕用户API的封装——就我们而言,我们需要提供一个非常类似旧版本的逆向兼容API。核心就是ODM和其它驱动在提供自己API的同时可以重用一些通用功能。这样就保证了横跨多个JVM驱动与库在和数据库通信时的一致性,同样允许应用开发者通过最直观的API去使用这个库来满足需求。

直观的API

我们想建立一个这样的API:

  • 让Java开发者感觉非常熟悉
  • 通过shell与MongoDB通信的逻辑是否符合你知道的(鉴于大多数我们的帮助文档都引用了shell)
  • 是否与其它语言驱动一致

基于这些需求,新版驱动的耗时就完全符合逻辑了。至今这些需求仍然在努力当中,从Java的角度上讲,我们需要完成以下几个点:

  1. 静态类型是Java的一个优势,所以我们也不能失去它。我们渴望IDE来帮助你,当你在尝试决定使用哪个方法及他们的参数时,我们期望Cmd+space就可以给出正确答案。
  2. 泛型。已经被使用近10年,我们希望在驱动中也可以存在。
  3. 我们期望MongoDB中名称和协议的使用会有一个非常好的体验,所以不会再有DBObject,请期待Document吧。
  4. 在建立查询和对象时有更多的帮助,更加容易理解并且拥有自描述。

可以理解的异常

当你为别人排错时,许多驱动抛出的异常显得毫无用处。甚至用户都无法确定这个异常的抛出者(服务器还是驱动),所以我们引入了客户端和服务器的异常概念。我们还引入了一些其它异常,所以取代得到一个MongoException和一些需要许多工作才可以理解的异常,我们为各种不同场景设计指定的异常(比如,MongoInvalidDocumentException)。

友好的测试

我在写第一个MongoDB与Java应用程序时做的第一件事就是mock驱动——如果你想做一些综合测试,你可能同样会mock或者stub驱动,这样你就可以分离MongoDB对程序进行测试。但是这里完全不行,所有类都被定义为final,并且这里不存在任何接口。即使在数据库上可以执行系统、整合、功能测试,同样存在区域隔离测试的需求,我们需要一种简单、快速的测试,可以检查工作是否如预期的执行。

新的驱动使用了API级别接口,这样就可以mock驱动来测试应用程序,清晰和解耦的设计让其可以更容易的进行驱动内部构件测试。当下我们已经在功能和单元上同时实施Spock测试,用以提升内部驱动测试的范围和可读性。

此外,我们还在acceptance测试(Java中,而不是Groovy或Spock)上做了努力。这里的目标就是为驱动建立一个动态的文档——不仅是如何去操作,同样包括了很多计划外发生事情的记录。同样许多工作尚未完成,我们期望随着时间的增长,这些问题都会被改善及解决。

向后兼容

同样重要的是,所有这些大型重设计、架构以及API都必须是向后兼容的。我们致力于现有客户,当然不希望他们在接受新驱动时要做太多操作上的改变。我们期望升级可以温和的进行,即使这样会给驱动的开发带来很多困难,但是我们认为可以更好的对新驱动进行验证——取代摒弃现有功能,我们可以在新驱动下兼容的运行当下测试套件,从而来验证结果是否相同。

总结

从MongoDB的官方博客中,我们不难发现新的驱动对Java开发者更加友好,然而用户最关心的异步支持并未出现在任务列表中。但值得庆幸的是,而文章后的用户提问中,Trisha Gee指出新驱动的设计已经考虑异步支持。虽然不能保证在3.0版本中得以释放,但是在下一个版本肯定会得以实现。

原文链接: The MongoDB Java Driver 3.0 (编译/仲浩 审校/周小璐)

更多内容请关注CSDN云计算频道 及@CSDN云计算微博

MDCC免费展位申请超预期 大会内容初曝光 在服务器与交换机定制之后,谷歌着手量子计算机CPU设计 电信天翼开放平台鲍占斌:优质能力 分成比例高 艾格拉斯副总裁王晓波:手游定价如何设计 Xcode 6 Beta 7发布:语法定、内库改,Swift何时完善? 干货来袭:由22个联邦机构分享的6482个数据集 Phablet出货量今年将超移动PC,明年再超平板 如何提高Web服务端并发效率的异步编程技术? 改改改!让应用通过审核出人头地的10个方法 正益无线CEO王国春:AppCan如何获得50万开发者青睐 在收购Xtreme Labs之后,Pivotal推出PaaS移动服务 .NET开发者必备的11款免费工具 .NET开发不可错过的25款高效工具 Docker最佳实践!尽在2014 Container技术大会 pflua:用Lua编写的高性能网络包过滤工具箱 掌上明珠张磊:如何设计手游付费体系 云游科技何千军:游戏开发和后端逻辑经验 《近匠》Highway1:孵化,不只是简单的帮助 嘉宾来了 MDCC 2014首批演讲嘉宾名单公布 前雅虎CTO:Hadoop扩展过程中的7个危险信号 【云先锋】星环TDH:性能大幅领先于开源Hadoop2的技术架构赏析 一周消息树:我想创业,但不懂技术怎么办? GitHub迁移数据库,借助MySQL大行其道! 实例亲授:教你如何创建AR应用 iOS七年,苹果都为开发者准备了哪些工具? TIOBE 2014年9月编程语言排行榜:Java、C++跌至历史最低点 如何甄别具有软实力的IT应聘者? 避免关注底层硬件,Nvidia将机器学习与GPU绑定 盘点MIT Demo Day上4个最有前途的创业点子 IDF 2014第一天纵览:智能设备唱主角 时尚化才是可穿戴的未来 ASP.NET之父Scott Guthrie:借技术之力铺平未来之路 有没有现成的函数,可以把一个int64整形数转换成带逗号的字符串? 如何在CTreeCtrl收到TVN_ITEMEXPANDING消息时,得到是哪一个TreeItem被展开? 各位高手,关于输出日期的问题!!!!!!急盼解决!!!! 想自己做个分销系统(jsp+javabean+mysql) 连接时错误,重定义问题 祝水圆兄弟姐妹们节日快乐!嘿嘿! 关于木马的问题 在DELPHI的图象处理中,怎样将GIG转成BMP或BMP转成GIF,各位大虾帮帮忙! 谁有SCO OPENSERVER开发平台的Licence? [给分]请 playking(风雪青松) 来拿分 我的朋友有一个很急的问题! 如何在DELPHI中使用RealSystem Producer ActiveX Control 100分求winsock pbl(pb7.0) 菜鸟问题:一个关于api的别名问题!谢谢!!! ===菜鸟系列===:CSDN上没人了吗?为何无人能回答我的问题???????????? 请教:SQL中动态数据表如何进行查询? 如何将object转化为int?? 讨论:你是从IDL开始所有的编程工作吗? 修改弹出的OPEN对话框? 第二个页面中的FORM怎么传值给第一个页面的隐藏控件?不用SUBMIT 在LotusScript中,如何实现将附件保存于服务器的某目录下? CSDN说这里人气低,决定关了这里,大家快来说话啊,真关了我们就没地方说话了 如何将int转化为char? 如何实现窗口中拖放. 如何确定一个数据窗口有几个参数 数据库程序的运行环境问题求救!!! 寻求vb例程 如何用VB6控制NT的服务 try和catch的问题? 求助~!关于FileListBox的问题 请问要在Web页面中放置ActiveX控件,是不是一定要数字签名才能在客户端安装? 表格内容对齐 where can download the crack about Rational XDE Professional v2002 .Net Edition? 调查:现在大家所用的中文输入法是什么?录入速度是多少? 数据库程序的运行环境建立问题求救!!! 伙计们,帮我看看我的安装差在哪一步了,为何多系统下Linux起不来 如何将文件输入流转化为string? 关一个Servlet调用另一个Servlet的问题 有关报表的一个小问题。 怎样才能做繁体版? 100分请教PHOTOSHOP5.0是如何把CMYK颜色转成RGB显示的? 需求进销存或分销 如何替换某字符串中的指定字符串!!! tcp/ip 如何获取文件的创建时间? 如何再98中删除IE的历史纪录,很怪~~~~~~~~~~~! 讨论:从IDL开始所有的编程工作 大虾们如何动态创建Table的field Editor功能 高分求解!与Delphi的参数问题! xml spy suite4.2需要联机注册,有没有方法可以使用? linux为何没有出现在启动菜单 @_@ 急需一篇元宵节的作文,300字好, 以信的形式写奥运征文 关于成长类作文的素材 你去过热闹的菜市场吗?菜市场里还有哪些蔬菜?他们生活在哪里?请仿照上面的句子写两句话.热闹的菜市场,是蔬菜们聚会的地方.金色的南瓜说:我来自高高的南山坡上;弯弯的菱角说:我从 一次测验中全班学生的平均数分为72分,已知及格学生的人数是不及格学生人数的4倍,及格学生的平均分是80分,问不及格学生的平均分为多少分? 成长类作文的素材我需要关于成长的文章素材(记叙文的),要是题材新颖一点的写作素材. 杭州市最大的蔬菜批发市场是哪里?是不是所有的蔬菜都从这里出去?我想找杭州市最大的蔬菜批发市场 最好是杭州很多农贸市场都从这里进货 某次测试,全班平均分为77分,及格率为90%,及格学生的平均分数为80分,问:不及格学生的平均分是多少? 小明家的客厅长6米,宽4米,现在准备要铺地砖.下面有两种规格的地砖,选择哪种地砖较省钱?A地砖:边长0.2m每块3元 B地砖:边长0.5m每块12元 (菜市场蔬菜可真多 萝卜 青菜 黄瓜 西红柿 应有尽有) 请给这句话加标点 描写城市繁华夜晚,寂静夜晚的句子注意,不要诗句诗词,是现代的 在一个长方形的花坛四周铺上宽1米的小路.长是20m,宽是15m.问小路的面积是多少平方米? (1)男生有20人,男生比女生多14人,女生比男生少百分之几?女生占总人数的几分之几?(2)连续三个自然数的和是210,这三个自然数分别是几?列算式吧, 征集描写城市夜晚的句子 能充分体现出城市灯红酒绿的样貌 和物质追求 最好是带点忧伤的感觉 一间教室的地面长8米,宽6米,需要用多少块4分米的地砖来铺地? 语文把句子写具体.数学家陈景润是一个不知疲倦的人.______________.高大挺拔的树木给城市带来了许多好处.____________.(老师规定每题都写40个字.如果只想得出一道也发上来吧,) 带有好词好句的写人作文有吗? 给一间教室铺地板砖,所用的地板砖与( )成反比例 A.每块砖的变长 B.教师的面积 C.每块砖的面积如果a:3=5:b 那么a和b成( ) A.正比例 B.反比例 C.不成比例正方体的表面积和其中一个面的面 照样子,写句子.要是没有了鼓声,音乐会变成什么样啊!没有节奏,没有深度,没有灵魂.照样子写排比句!不对,不是排比句! 自我介绍 300我叫张蜜 15岁 爱音乐 爱运动 座右铭:宽容别人是尊重,宽容自己是放纵.小眼睛,个子不高,1.58 喜欢狗 在太湖县新仓镇中学读九年级 一件有意义的事 作文 开头结尾要优美 一批产品的合格率是百分之九十五,表示()占()的百分之九十五 描写古代繁华都市的句子就是人很多,人都是衣着华丽的.街道两旁有店铺.反正很古色古香的那种.写小说要用.小说里的都城的样子. 某小区要给一块正方形空地铺地砖,原计划用边长为2分米的正方形地砖来铺,需要2500块.后来改用边长为4分米的正方形地砖,需要多少块这样的地砖?(这是问题) 一箱灯泡有20个,灯泡的合格率是87.5%,则从中任取一个,是次品的概率是多少? 描写古代城市繁华句子如题 给一间房子铺地砖,如果选用边长是3分米的正方形的地砖,需要1000块.如果要用边长5分米的地砖,需要多少块?用比例解 一箱灯泡有45个,灯泡的合格率为92.5%,小刚从中任意拿出一个,拿出的灯泡是次品的概率为( ) 求好的初中作文素材!关于快乐的!亲情的!太假的不要!急. 在一个长20米,宽18米的长方形花坛四周铺上1米宽的小路,求花坛的面积? 一箱灯泡有24个,灯泡的合格率是87.5%,则小兰从中任意取出一个次品的概率是多少 急求好的初中作文素材!适合初中生的,最好是关于亲情,友情,师生情之类的,太假的不要最好是新一点的素材(不需要太多,不一定要整篇文章,只要有好的材料就行),先谢谢啦 1、 四年级A班有学生50人,男、女生各25人.一次数学测验,全班同学平均分为85分.如果男、女生分开计算,女生比男生的平均分高2分.男、女生的平均分各是多少分? 某批灯泡的合格率为0.5,用中心极限定理求10000个灯泡中合格灯泡数在4800-5200的概率.(Φ(4)=1) 钢结构10.9s高强度螺栓和螺母的材质是是什么 关于奋斗的作文素材 小学作文中的好句子,不要太深奥 作文500字 自己努力与借助他人的作文素材简短的最好,五个.谢谢了! 求写人的作文!要多好词好句!求写人的作文,那作文要有很多好词好句!拜托了! 写一段描写城市夜景的段落,200字左右就可以了. 写奋斗的作文素材,5条 一箱灯泡24个,合格率为87.5%,则从中任意拿出一个灯泡是次品的概率是?一箱灯泡24个,合格率为87.5%,则从中任意拿出一个灯泡是次品的概率是[ ]A.11.5%B.87.5%C.13.5%D.12.5%答案是12.5%,但是我不懂 找几句描写城市夜景的句子描写城市霓虹灯下夜景的句子,多多益善. 校园景色 词语校园景色 词语 句子和段落。 一箱灯泡有24个,合格率为百分之八十,从中任意拿一个次品的概率为多少? 描写城市夜景的句子要符合实际点的 关于书法的作文的好开头,快啊! 描写人物的作文的好词好句 “我做了一件有益的事”或“我长大了”作文,给些新颖的素材,一定要新! 我找到了最美的人 作文开头结尾 关于人物的描写,好句,好词,作文 要给一件长8米,宽6米的教室铺地砖,现有两种不同的地砖,A种地砖的规格是40厘米×30厘米,售价每块10元,B种地砖的规格是20厘米×15厘米,售价每块8元.那种地砖更便宜?需要多少钱?快,有悬赏 快, 谁能帮计算下1605mmX935mm 8个厚的Q235-A钢板承受力计算.最好能给你一个详细的计算过程. 早晨菜市场热闹的场面抓住特点 求书信格式的奥运征文900字以上 描写古代商业城市繁荣的古诗?例如:描写长安城,北京城,汴梁城,金陵城等城市繁荣的诗歌 菜场真热闹(写具体) 我的奥运梦想 征文 (书信格式) 描写城市繁荣的诗句不要古诗里的,但对仗要工整
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘