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

揭秘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云计算微博

Google Glass于4月15日在美对外开放购买,售价为1500美元 电脑上的网址怎么样复制到手机 创客天下——《Make》及Maker Faire创办人、O'Reilly Media创始人Dale Dougherty专访 《近匠》aGlass团队:透析眼控技术的价值 一周消息树:超级充电器来袭,30秒可为手机充满电 北森CTO张庆化:利用Spark实现数据驱动价值 大公网冯咀志:站内搜索系统的PowerLinux迁移实践 2014移动开发者必备的十大应用测试工具 前《连线》主编Chris Anderson:创客就要DIT UC多屏战略 推出电脑版和电视版浏览器 “全国云计算大数据创新项目评选”征集活动正式启动 【走近院士】李伯虎:云制造技术的应用及发展 一周热点: Twitter的下一代分布式数据库Manhattan 专访微软陆奇:大转型中最难的是文化的改变 【CTO俱乐部走进腾讯】问题征集进行中 颠覆移动营销世界的女王Yunha Kim为女性CEO正名 Google揭露“仙女座”虚拟网络,及分散和集中架构之辩 DHTMLX Touch:开源的HTML5和JavaScript框架 Supercell下一城:《海岛奇兵》续写芬兰手游传奇 开发者盛宴 2014 Unity亚洲开发者大会盛大开幕 微软全球中国云业务总经理:云落地中国的最大难题 PTVS 2.1 Beta版发布 Visual Studio的Python工具 【走近院士】李兰娟:云计算与大数据将成为医疗改革利器 迭代不等于学习,聚类分析也不等于机器学习 Office大肆杀戮,已攻下Chrome Web Store Bug都补好了?Google发布Android 4.4.3更新 微软被传收购Xamarin 强势推进移动新战略 挑战传统金融业务 Facebook进军移动支付领域 亚马逊AWS需解决的五项问题 腾讯自曝:大数据平台的秘密 继Cloudera之后,MapR宣布对Spark的完全支持 请教 请问JDBC 中classes12.jar、classes12_g.jar、classes12dms.jar这三者有什么区别? 给小弟一个启示 寻电子商务领域合作-购买源码或合作开发 水晶报表显示时如何让它不出现toolTip提示信息? 开发Struts程序遇上的问题 如何启动Tomcat?? 在access中怎样给一个日期型的字段附空值???(在线等待) 快毕业了,我的烦恼?!!! 如何保存页面,一项一项粘贴他妈的太烦了! 在IE下执行servlet时为什么有些servlet可以正常运行,有些却提示下载文件? 如何把两个关联的DataTable 合并成一个DataTable 或者DataView 象数据库中的视图 在asp调用access数据库时出现错误( 在线等待) InstallShield Developer 7.0 East Language Pack 的问题!!! *****寻求好的Global.asa(在线等待)******* 大家快过来看看这个小程序!送分!来者有分! 学完操作系统的,将来能作什么工作呢? Insert一幅图片到Oracle数据库及从数据库中取出这幅图片的方法及代码(1) 如何将文本框设置成只读的,帮帮忙了!在线等待! MSXML如何使用,能否给一个较详细的例子 一阵风 屏蔽控件某个事件 使用MicroSoft DTSPackage Object Library开发的问题 逃离爱情 [原创] 如何动态使用web service 自动递增的字段数据类型,是否应该设置成number? 寻电子商务领域合作-购买源码或合作开发 讨论:如何用WinSock API 的异步选择模型(WSAAsyncSelect模型)构建一个多连接的服务器? 如何删除一个服务,如:OracleOraHome81TNSListeneroral;谢谢!!! 请问各位软件是如何控制硬件的? 如何判断输入的字符串长度? 能否以命令方式启动win2000 请问如何判断字符串中的字符在a~z之间 如何在jsp调用windows下的程序执行.就是IE当shell.(有点像黑客:) 不是用来干坏事 高手呀,能告诉我怎么把OLE drag&drop过程中的图元格式改成增强图元格式? 哪位有http下载的源程序(或下载地址),C++的。。。 哪位大侠有制作均衡器的资料和代码,是否有相关控件?在线急等,先谢谢了 dbgrid焦点问题。 如何识别客户端浏览器是不是腾讯浏览器? 怎么样得到上个月最后一天的天数 关于图片显示的问题? 一个应该很简单的问题!散分了! sybase12安装后sybase server启动不起来,服务启动没有问题 请问oracle JDBC 中classes12.jar、classes12_g.jar、classes12dms.jar这三者有什么区别? ( 召唤HTML编辑控件(ActiveX) 为什么没有遍历所有文件和目录?哪位可以帮忙调试一下。 请问如何再java里面执行oracle数据库指令如;exp,imp等等 高分求助!关于触发器。来者有分!在线等待! 工作累了﹖沒有精神﹖來我這里喝一杯吧﹐ Ghost2001如何备份win2000系统 工作累了﹖沒有精神﹖來我這里喝一杯吧 晚上紫外线强度大吗?与白天比怎么样 省内寄信邮费问题1 广东省内寄信,跨市,邮费需要多少?2 信里就两张复印纸,A4的那种,是通过放进邮筒寄出去的, 谁知道非谓语动词的英文定义啊? 英语主动改被动你不可以在课堂上大声讲话.翻译.改被动 寄信邮资问题我现在人在温州市鹿城区,现在要寄一堆信出去,分别寄到以下几个地方:温州市永嘉县瓯北镇温州市永嘉县上塘镇温州市苍南县灵溪镇温州市乐清市柳市镇温州市乐清市乐成镇 英语对话 What qualities do you value most in a young person?And why?是要编一个英语对话 主题是关于What qualities do you value most in a young person?And why? 英语,主动改被动 This is the Postfix program at host mail.zhiyin.com.cn.是帮我把他给翻译成汉字啊 谁给我一些关于保护环境的英语范文, 求英语作文80词左右,关于环境保护或者关注灾难 关于英语主动变被动的小问题.They have to built many houses since last year.变为被动后:Houses have to been built since last year.这么变对么?be 为什么要改为 been?没有be 变成 been 关于旅游时保护环境英语作文不随地吐痰,不乱写乱画之类的 德语von wegen的意思如题von wegen, Toni wird es schon richten! 英语主动变被动I saw him playing football at that moment. 如何变被动 在动词后加er变职业的单词越多越好 Ich mag Deutschland von mein Herz 德语 【英语】被动变主动Rice is grown in the northeast of China.变主动 what is healthy food什么是健康食品,定义. 德语翻译:Es regnet in meinem Herz 德语中的uber von bei的区别德语中的uber von bei好像都有“关于”的意思.究竟怎么区分?举几个简单例子~ 怎样回答:What food do you think is the healthy food and what foood do you think is un healthy? 没有大学文凭,想考英语证书!然后找个工作,怎么办?现在没有文凭无法生存啊, 德语这个句子里的von什么意思Es ist Tennisspieler von Beruf.这个von是什么意思,求理解 在形容词后面的从句叫什么从句 请教德语的介词aus和von德语中aus和von都表示“从……来”,感觉区别主要靠习惯.比如人从哪个城市来是用aus,但车从哪个城市来是用von.我想问以下几种情况应该用哪一个:(1)kommen___Essen.(2)kommen 德语unter/mit/bei Wirkung von ...用unter/mit/bei 有什么区别啊?举个例子? be动词后面要接宾格还是主格?连词呢?讲清楚点,如果be动词后用宾格,那为什么Am I cool?是主格? 关于介词aus和vonWoher nimmt die Mutter das Tuch?+ Vom Tisch oder aus dem Kleiderschrank.这里从桌子上拿用von dem 而从衣橱里就要用aus了呢? 请问有哪个非谓语动词 英语中,动词过去式后应该接什么人称代词?主格还是宾格? 现在寄信邮费怎么算?我听说是本地八毛,外地一块二.那是不是我从北京寄到天津和寄到新疆都是一块二?重量有限制吗? 非谓语动词具体有哪些? 如何判断if引导的是条件状语从句或宾语从句方法 寄信 邮资 现在寄信的邮费是怎么算的?尤其是外省的~ It is the first American movie of this kind ( )I've seen.A.which B.what C.that D.when 英语翻译大哥大姐,中英文最好都要,*(选其中的一个也可以哦)* It is the best film ___this yearA which I have seen B I have seen我选A 但是不对 为什么选B啊?什么时候加which 这样的词 什么时候不加 望高手详解 英语翻译You can't wash this dress;you must dry-clean it.He is going to give a lecture on how to learn English tomorrow. vor allem 最近看文章经常看到这个词另外,immer+比较级有没有代替形式,因为听人说过,但是没记下来.说是immer那个形式现在用的相对比较少了. 初一英语演讲稿范文 英语翻译1.他每周三学习英语 2.他昨晚睡觉前喝了一杯水 3.汤姆去年得到了他的驾驶执照 4.工人们建造了一些楼房 5.我们可以按时完成作业 6.学生们必须解决自己的问题 7.老师让我遵守校规 8 在都是if时.如何区分宾语从句和条件状语从句 this is the best film i 【】 顺便把相关结构句型说一下谢谢了this is the best film i 【 】 since last year a.saw b.see c.have seen d.had seen 顺便把相关结构句型说一下谢谢了 被动 还有 主动英语应该怎样翻译? 名词从句讲解that和what怎么区分,谁能帮我懂得来讲讲名词从句的语法知识或其它从句的知识 急求初一英语比赛演讲稿范文 英语翻译1many terrible pollutes the room2\ people love Disneglard3\ many children like Mickey mouse4\the Amricans speak English5\ALL of us like her6\Liping often rides a bike have 后面加be动词的什么形式?是宾格还是什么 英语的主动变被动They build houses every year.变成被动后:Houses are built every year.这样变对吗?句子末尾的时间直接落下来吗? 英语翻译我长大以后,就不再被老爸揍了.我有点儿累了,我现在不想被任何人打扰. 宾格后加动词吗动词后加宾格吗? 英语试题,帮做下,I was ___A__in a small countryside in China.A.brought up B.bring upC.raised up D.raise upThese students have little _C___for how others look at them.A.thinking B.thoughtC.concern D.considerationThere is a ____of two hours with apple汉语是什么?apple的汉语是什么? He dreams about everything.句子结构分析 求英语作文:the moment i was prised by my.(填一个词)急啊.who prised you?when and why were you prised?how did you feel?what did you think of that moment?只要把问题回答出来就行了,不要太难了, 防震减灾作文 翻译 我对学习英语感到兴奋地 用到get excited about something 给我写英语作文..The most unforgetable moment..60字左右..标题及中心:The most unforgetable moment 围绕..2008年5月19日下午2:28分到2:31分的默哀那个时刻..写一篇60字左右的文章.... 非谓语动词是什么意思? whether/if引导的宾语从句
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘