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

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

将会出现iCar?苹果应该收购特斯拉的七大原因 广大程序员的福音:Bing Code Search扩展助你方便查找代码 深挖线下价值是当前婚恋交友网站获取盈利的突破点 15个最好的Bootstrap设计工具推荐 Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】 Webix 1.5发布:一个强大的JavaScript UI组件库 四大著名风投:在我们眼中只有技术革新 美女CEO谈AWS:是香水还是毒药 国外一学生发明新计算机系统,用微芯片代替硬盘 《近匠》第12期:Yeelink——智能硬件云服务 三星Galaxy S5:home键内置指纹识别传感器、5.25寸2K屏幕 Google发布Google Glass使用守则 三星将发布新款智能手表 搭载Tizen系统抛弃Android 从Camera360 V5版本发布,看现代相机应用趋势 索契冬奥会API:赛事的数据直播 为什么开源企业的开源大旗正在褪色 尘埃落定 腾讯确认投资大众点评,获20%股份 Unite China&#183;2014:上千Unity开发者狂欢、五大精品课程全面开启 下载4万首歌曲仅需几秒——蓝色巨人IBM发布新传输技术 15核芯片+数据平台,Intel软硬兼备的Hadoop战略 Facebook以160亿美元收购50名员工、4.5亿月活跃用户的WhatsApp 2014年全美最吃香职业TOP100,程序员排第一 LinkedIn向所有用户开放博客发布平台 Google与Facebook的产品研发之道 小米海外扩张第一步 红米进军新加坡 Google I/O大会时间已定,Google Glass真的来了? 精英团队PK全能型数据科学家,拼的可不只是数量 专攻移动支付?PayPal将面向全球开放移动SDK CoconutKit:iOS开发必备的开源组件库 个人隐私是如何“泄漏”的:国内外互联网企业隐私策略对比 惠普2014年Q1财报:净利润同比增16% PC业务逆势好转 (三层结构)我按照李维书上所说的,为什么客户端老是连不上应用程序服务器端? 初学Delphi,请各位大虾帮助!高分送上 关于定位打印的问题!!! 怎么写分组发新闻的jsp程序 关于界面设计的问题... 我想自己写个Mp3播放器,结果遇到不少问题。请大家帮忙 WIN2000关机巨慢,原因是什么? 关于字符串比较大小?下面代码有错么????????????? c++调试问题? #include <string> 后编译不过去。请帮忙看看 请教各位:关于TButton->ModalResult 在NS浏览器中如何对text等这样的对象进行事件的处理? sql2000里如何得到当前记录号??/ ----------- iis或win2000server中如何设置文件夹大小??? 大家有没有做过医疗社区管理软件的?最好有成熟的源代码。 介绍一款好的主板,搭配p41.7G。 我升级了我的VB6程序,有个问题解决不了,来看看 做一个Java程序。将光盘上的某个目录拷到C盘上 清教一个计算机系统结构的计算题,题目见内容 关于文件读入的问题!谢谢各位! 数据统计分析问题,请专家关注!好难 如何判断执行 INSERT INTO 语句插入记录成功或失败? 哪位大侠能给我详细的介绍一下CWnd::SendMessage()函数 Strange return value of CoInitializeEx [HELP]辞职问题:杭州的GGJJ们来帮帮我 谁有windows 95的下载地址? ADO与本地数据库问题,看来是高难问题啊,怎么没人接招呢? tell me why??有关jdbc for sqlserver 2维数组按某一列进行排序,内详,求救? 关于在Oracle数据库服务器如何提供下载一个excel文件型的大对象到本地?十万火急!三根鸡毛! 怎样得到数据库里某字段里没出现过、而且还是最小的数字呢? 请问大家这种数据表怎样设计最好??? 关于ID3V2?请大家帮帮忙 <<VC技术内幕(第四版)>>中应用程序框架示例的程序要怎样才能运行? Win2K的远程访问出现身份验证问题 关于TMediaPlayer缩放,请您赐教 如何显示一个库中所有的表以及显示一个表的结构 能不能使自己画的一个图形,响应鼠标事件? 如何取得数据库某字段中从未出现过的、而且还是最小的数字呢? 关于终端服务器的打印问题!!!!在线等,解决立即给分 怎样才可以在WIN2000下隐藏你的程序 急,请问把一个控件上的内容拖到LISTVIEW1上时,在LISTVIEW1上的一个ITEM上释放,此时如何获得ITEM的caption??? .pdg 类型文件怎么打开? 大家不妨说说二层应用程序转向三层应用的一些经验以及注意事项 为何看不到网络邻居上其它计算机的共享文件夹? 请问大家这种数据表怎样设计最好??? 用listbox绑定数据库的某个字段后,如何通过点击取得相应的值 dbgrid中的mousedown事件怎么触发不了 系统日志的错误信息,谁给分析一下?分不够还可以加 tell me why??有关jdbc for sqlserver VC录音问题 分析下面各句子所运用的描写方法,以及各自起到的作用1,在写第一个字以前,他担心地朝门口和窗户看了几眼,又斜着眼看了一下那个昏暗的神像,神像两边是两排架子,架子上摆满了楦头.他叹 突然间想不明白这说的到底是个啥,哪个明白人给我讲讲呗. 蔺相如和廉颇个有什么长处?《将相和》这篇课文告诉我们什么道理 乡下人家作文要冬天的 注重高品质生活有什么意义 秋天的怀念主旨是什么100字 月光曲课文写了一件什么事 谁能帮我改改雅思的作文,雅思的作文,议论文.Writing task:When a country develops its technology,the traditional skill and ways of life die out.It is pointless to try and keep them alive.I believe It’s true idea “When a country dev 什么是品质生活 月光曲讲了一件什么事 我的雅思小作文谁能帮忙改改writing test 1 According to the chart that shows some figures of Japanese tourists travelling abroad.From the table we can clearly see that in the year between 1985 and 1995,more and more Japanese perfer to trav 29号考雅思了,尤其口语和作文 《散步》 作者写到第4段时,为什么会从春天的景色联想到生命?这样写有什么作用? 球雅思高手帮忙 帮我改改作文吧,最好打个分Traffic and housing problems in major cities could be solved by moving large companies and factories with their employees to the countryside. To what extend do you agree or disagree? The iu 生活品质的内涵是什么?这是我面试被提问的一道题(一共两道问题 十分中内答完)第二个问题是:现金流量表能反映企业那些问题? 下列句子运用了哪种人物描写方法?⑴我小心翼翼地伸出左脚去探那块岩石,而且踩到了它.() ⑵我父亲说:“不要想着距离有多远.你只要想着你是在走一小步.你能办到的.”() ⑶我又照 上联 赞雕刻者高超技艺 下联 还有一个星期我就要考雅思了 作文方面急需提高 望雅思大神帮忙改改我的小作文 table below gives information on consumer spending on different items in five different countries in 2002.  Summarise the information by s 秋天的怀念:指出下列句子所用地人物描写方法.母亲就悄悄地躲出去,在我看不见的地方偷偷的听着我的动静.( )2.母亲扑过来抓住我的手,忍住哭声说:“咱娘俩在一块儿,好好儿活好 我作文不太好,希望大家看看给打个分,帮我改改As for elderly,living in caring house is better than living at home with young children.Present your argument to illustrate whether you agree or disagree.There is a growing tendency that m 介绍我自己的英语作文有哪十一项 感受乡村作文 上联:赞雕刻者高超技艺 下联: 指出下列各句采用了何种人物描写的方法.(1)她身上穿着样式老掉牙的旧衣服,可是很干净;一条手染的蓝裙,还带着乡下染缸中的那股土味儿.一块棕褐色的绒线方披肩交叉地盖在她那干瘪瘪 乡村体验作文 雅思大作文 谁来帮我改改 都错在哪儿雅思大作文 题目是学生上课的内容应该由政府还是由学生自己来决定Schoolingis almost the mostimportance part of children’s growing up.A topic is being discussed by so the ge 指出下列各句描写人物的方法1、我想我又不真做小长毛,不去攻城,也不放炮,更不怕炮炸,我惧惮她什么呢!()2、她立刻伸出胳膊,一把将我按住.我惊异地看她时,只见她惶急地看着我.()3、 求作文:触摸城市与感受乡村急用 关于《核舟记》对联,上联为赞雕刻者高超技艺,求下联 下面的句子用了那些描写人物的方法吗?1、叙利奥是小学五年级的学生,十二岁,是个黑头发、白皮肤的男孩子.2、他下床悄悄穿好衣服,轻轻地走进父亲写字的房间,把煤油灯点着.3、“啊,不是 急求大神翻译这篇英语文章Bermuda prepared itself for a potential hurricane last night as tropical storm Florence picked up strength and headed towards the North Atlantic island.By yesterday evening, Florence was around 500 miles south of B 上联“赞雕刻者高超技艺” 下联“赏舟中人________”急 黑洞里面有些什么东西?有人说连接另一个世界,但是据我所知道的黑洞,它会向外界释放热量,那根据能量守恒定律不就解释不通了吗?能通向另外一个地方应该全吃进去不吐骨头才对吧?难道除 核舟记工艺品艺术的精湛主要表现在那些地方? 对对子(任选一联作对) (1)上联:赞雕刻者高超技艺 下联:----------------------对对子(任选一联作对) (1)上联:赞雕刻者高超技艺 下联:---------------------- (2)上联:---------------------- 短文两篇贝壳答案:文章第三段的思考是由什么引发的?第三段:在海边捡起这一枚贝壳的时候,里面曾经居住过的小小的柔软的肉体早已死去,在阳光,沙粒和海浪的淘洗之下,贝壳中生命所留下 《核舟记 》该艺术工艺品的精湛主要表现在那些地方 17鸟的天堂那“鸟的天堂”的确是鸟的天堂啊!这句话如何改为双重否定句? 2011四年级下册语文期末试卷2011四年级下册数学期末试卷的答案是? 核舟记:第一段说明雕刻者的( )、( )、( ),引出核舟的( );第二段说明核舟的( )和( ). 200字以内,或300字父与子的作文 《礁石》艾青 一个浪,一个浪 无休止地扑过来 每一个浪都在它脚下 被打成碎沫、散开…… 它的脸上和身上 象刀砍过的一样 但它依然站在那里 含着微笑,看着海洋……1诗中两个“它”指代 谁知道鸟的天堂生字 生词的意思呀?请打出来, 17鸟的天堂作者介绍 2010―2011年四年级下册人教版数学语文期末试卷 《核舟记》中工艺艺术品的精湛主要表现在什么地方? 风筝 他只得张着小嘴,呆看着空中出神---他高兴的跳跃.这句话用了那些人物描写方法?作用是什么? 艾青《 礁石》的理解艾青《 礁石》中礁石不是自然物,而是情感物.那么这个情感是什么呢?请根据下面实例写出其他三种意义.例:一个有钢铁般的人,是永远不怕风吹雨打的. 在《核舟记》中 文章通过哪些方面来体现王叔远的雕刻技艺? 他只得张着小嘴,呆看着空中出神,有时至于小半日.远处蟹风筝突然掉落下来了,他惊呼.表达效果是什么 四年级下册语文和数学期末试卷,急用! 四年级鸟的天堂课文生字 生词的意思,明天急用, 春天在广场上有许多人放风筝.会放风筝的人,可使风筝静止在空中.图2中的四幅图中,MN代表风筝截面,OL代表风筝线,风向水平.在图2所示的四种情况中,风筝可能处于静止状态的是 麻烦请详细点 将相和中廉颇是一个怎样的人,蔺相如呢 描写秋天的诗有哪些?(要有朝代和诗人的名字) 《风筝》作者回忆幼年时期我和弟弟对待风筝的态度有何不同?请从人物描写的角度入手进行分析. 结合【将相和】内容,蔺相如如何廉颇分别是怎样的人 关于描写秋天的诗句加作者 做人最重要的品质是什么? 课文 廉颇和蔺相如评语
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘