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

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

为什么JavaScript有能力成为未来企业级编程语言? Red Hat CEO:拥抱开源 拥抱克隆 小米手机-HAXLR8on硬件黑客马拉松 开团了! 移动周报:雷军做红米的N个理由 Pangea Software CEO:08年App Store游戏降价大战的真相 揭秘MongoDB最新Java驱动:更好的JVM支持,指日可期的异步 不仅只有IE Mozilla将于发布Win8平台Metro版Firefox 360搜索发布新产品“我的搜索” 引入网民评价和网站名片功能 AppScale:Google App Engine的开源实现 近期十大优秀jQuery插件推荐 通过语音识别来编程 速度远超键盘 BrowserStack:多系统跨浏览器兼容性测试工具API发布 更加开放?Path向13家应用开发商开放API 重金力邀开发者 联想智能桌面应用开发大赛开幕 SDCC 2013大会讲师名单议题出炉 8月20日五折票价最后一天 程序员困境:底层编码能力正逐步丧失 寓教于乐 给代码审查者的几点建议 裁员4千、总裁员人数超过7.5万,难掩思科锋芒 物联网离普罗大众还有多远? 悼念斯诺登使用的加密电邮服务——Lavabit架构解析 运营商上阵OTT “一笑泯恩仇”后路在何方 [企业开源系列]后起之秀Facebook凭什么挑战互联网霸主Google? 谷歌推出免费标签管理应用Tag Manager McAfee CTO Phyllis Schneck被任命为NPPD副部长 Bootstrap 3.0发布 更好地支持移动端和响应式开发 国内创业公司QingCloud的魄力:做一个世界级的IaaS服务 从毫秒到微妙,纯硬的闪存阵列IBM Flash System来了! 中科创达邹鹏程:黑客精神逐渐被人遗忘 有点让人感伤 通过讲故事的方式来设计优秀网站 “肮脏的”IT工作排行榜 Clank:带有SCSS的高效率移动应用原型框架 那想在记事本中实现“查找,”“替换”。。。。要怎么做,我头猛大 有没有按位图画不规则窗口的代码? 怎样得到LISTCTRL的全部列(COLUMN)的信息,难道要用GETCOLUMN()? 为什么现在学win32 API的人这么少? 还是老问题 redhat安装问题,请高手指点 网页中有一文本框,如何约束用户输入格式 现在fanso怎么回事? 安徒生童话之六---老爹做的事总是对的 (呵呵,好故事,很美丽) 如何调用EXE或DLL程序,使被调用程序是调用程序的MDI中的一个子窗口? 《网络设计师教程》P103表5.2中 4B/5B码和4位2进制之间是怎么转换的? COM进程类组件中,在一个接口中加了一个方法,成员变量类型CString,可是不行,那该用什么? 请问那里有 motif toolkit 开发工具下载 一个mysql的问题! 出售软件源代码以及销售权! byte类型的数据如何转化成二进制数,显示给用户(如8-》0000 1000) 代征:精通vc的深圳朋友,精通网络通讯的开发和多媒体处理。 20分求助!这条警告是什么原因呀?怎么解决 ?LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF 局域网的文件共享传输是基于什么协议的? windows and dos ??? 请问大家几个技术问题!!谁能回答阿!比较着急!:) 有没有代替VB里的PICTUREBOX 的控件,VB里的不好用?????????? 我是新手,请问JSP有些什么开发软件?比如JAVA用JBUILDER。。。 请问知道整型值a=97,什么函数可以得到"a"呢?即97->"a"通过什么函数呢? 如何将十进制数转换成二进制数 函数对象的简单问题 喜欢仙剑的朋友请进。:) 恭喜恭喜? 我想制作C++ Builder4工程的安装程序,不知道用什么软件,请大家帮忙。谢谢! 请问大家几个技术问题!!谁能回答阿! 我是ASP初学者,请求一个简单的问题,Help!!! 有没有关于installshield6的书, 快看呀!我真的要不行了! 请教大家一个术语吧! 低手问题,关于Form中的数据问题,谢了。 如何用PictureBox控件显示GIF图?特急!!!!!! 单文档多视(急!) 想学delphi中关于database方面的内容,不晓得哪本书好,大家推荐好吧? “CSDN准备推出海外图书邮购服务,首批是侯捷的著作和译作” 什么时候可以开始? 谁能介绍一下嵌入开发领域比较成熟的产品?他们的功能、性能如何 关于Autocad字体的问题 在 ActiveForm 中如何初始本地数据模块!菜鸟问题! (const char *)&p转化为delphi语言该是什么? ####我拼了命也要问出这个问题的答案########## 怎样才可以描述点击窗口右上角的“x”时所发生的事件,请给个例子,谢谢了! 哪儿有Install anywhere 4下载 庆祝kylix2001,终于知道叫什么好了,耶………… VB,请问set obj=new class 和 dim obj as new class的区别????????? install anywhere 4 哪儿有下载? GGMM,向我灌水..... 如何截获视频卡串送过来的图像。 500字《历史的选择》读后感作文 文章中一句话的含义?高手进!白云深处吉普车行了两个多小时,终于登上海拔两千多米的燕山主峰玉皇顶.纵目四望,八百里燕山,一派磅礴气势.河北电视转播台高高的井架直插云霄.我们正看得 父爱的作文300字要写生病了爸爸照顾你,下午必要, 关于历史的选择的作文800字 大师风范这篇阅读,从大师的沉默中你体会到了什么 父爱作文300字,要描写最动情的一个瞬间!就是写一个动情的瞬间,不要太俗气了. 紧扣历史的选择400~500字作文 大师风范阅读答案.2010—2011六年级的试题啊!照样子写词语 (技艺)高超 精彩的() ()高尚精湛的(琴艺) ( )高明 精致的()本文最后一句在写作方法上叫做 仅此一点3个含义中的第 求关于父爱的作文300字要精彩的 不要流水账 热牛奶的坚决不要 历史的选择作文 大师风范阅读答案 苏教版啊 五年级下大练第三单元测试卷的那个啊 急QAQ原文:一位世界一流的小提琴演奏家在为人之道演奏时,从来不说话。每当学生拉完一曲,他总是再把这一曲再拉一 写父爱的作文300字,只要300字可以的加悬赏分 历史的选择作文怎默写1500字 大师什么是大阅读答案 这一刻,我感受到了父爱作文500字 如何提高写作文的速度?我每次写作文都写得很慢,几乎要两个多小时.我写作文时常常是写了这一段不知道下一段写什么,要思考好久.请问有什么办法能使我写作文的速度变快又不影响文章的 历史的选择作文怎么写?312321 请大师细腻翻译短文,题目也要翻译,谢谢 如何提高小孩子的做事情速度? 我想知道“历史的选择”作文怎么写? 作文:一个令人感动的瞬间(体现父爱或母爱) 怎样提高写字速度. 历史的选择整整800字的征文作文如何写? “一个令人感动的瞬间”为题,写一篇作文,歌颂无私的父爱或母爱.要求有具体的细节 怎么提高写字速度?最好是字写得好速度又快的哪种. 大师风范什么意思百度知道 描写父爱或母爱的好文章急! 如何有效地提高写字速度?这里的写字是指硬笔(钢笔、铅笔等).平时因为写字速度慢导致语文的抄写作业几乎成了我的恶梦,政治默写时更因为写字速度慢而无法完成(我会写,而且背得很熟 阅读大师风范中:仅此一点,足以称之为大师,句中的此指的是什么? 如何写关于母爱和父爱的作文?要500字以上!写一件事!适合四年级! 写作文 申论 我特别慢写作文 申论 我特别慢 你们一分钟,能写多少字啊 我特别慢啊 蜗牛一样 概括《大师风范》,快. 父爱母爱的好文章要不长不短,通俗易懂,直点中心. 怎么才能提高写字的速度.写字精力不集中. 求英语阅读答案,和文章的主要内容,具体私下沟通,高手来, 急需一篇描写父爱或母爱的感人好文章最好短一点(写作业要用),希望今晚就有~谢谢了~ 怎样提高自己写作文的水平? 18米增加六分之一米后是() 18米增加它的6/1是() 甲数是108,甲数的3/1与亿数的4/1相等 乙数是() 一根20米长的铁丝,先用去它的20/3,再用去20/3米 还剩下() 应用题 有一份稿件,小明第一天 关于母爱和父爱的作文急需母爱或者父爱的作文,要通过一件事、一次批评等等,要在今天~ 怎样提高写作文的水平 西游记中前十回关于描写师徒四人性格特点的主要内容. 母爱或父爱的作文 如何提高自己写作文的语言水平我现在上高二,每次作文语言都不够好,论据哪方面也了了,应该如何提高?看什么书比较好? -):-):-)求大师一一帮一帮 关于父爱或母爱的作文符合实际一点拉 怎么让我写作文的水平提高? 民族风范的作文 有关父爱母爱的作文!……………………………… 如何提高写作文的水平 大师风范中小提琴家为什么说”琴声是最好的教育“? 父爱母爱作文 如何速度写作文速度作文要认真先看好作文的题目,在认真的思考,想清楚在速度写! 大师风范中的小提琴家为什么说:琴声是最好的教育 关于父爱母爱的文章给哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥 作文 《历史的选择 》 500字左右,要快讲的是抗日英雄的 急 谢了 上个世纪初,有一个犹太少年,他做梦都想成为像帕格尼尼那样伟大的小提琴演奏家.他一有空就练琴,可是,就连他的父母都觉得这个可怜的孩子拉得实在太蹩脚了,完全没有音乐天赋.有一天,少 有关父爱母爱的文章快 作文 500字 曾经在一本杂志上看到过一篇这样的文章,给我的印象很是深刻,队长杰克带领着他的队友们正在日常的维护铁路的检修工作,天气很干燥,工作枯燥乏味,杰克在这条铁路上已经工作了15年了,所 父爱300字作文我说的是父爱,而且一定要300字左右
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn