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

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

直接拿来用!最火的Android开源项目(二) 营收奇迹:三消游戏Candy Crush Saga成功启示录 马化腾对话李连杰:移动互联网的能量有多大? UC与趋势科技携手,移动浏览器加固安全 乐视发布超级电视X60 售价6999元 巨头们抢滩或已结束?EMC掀起首场SDN登录战 CloudStack创始人梁胜:让中国软件走向世界 ArduinoDroid:让你在Android设备上开发Arduino 码农们的机器人:LEGO MindStorms EV3 详解 JavaScript 中的 this 对话PaaS平台dotCloud布道师:“轻量级”与“重量级”虚拟化 微软:谷歌企业生产力软件依然不行 IT旅途——程序员面试经验分享 17岁女高中生赢得编程马拉松大赛冠军 雅虎宣布开发新的搜索工具 创新用户界面 前谷歌高管给初入职场新人的14条忠告 业界良心 Facebook下一步将开源交换机 Google Glass:未上市先遇阻 TIOBE 2013年5月编程语言排行榜:Objective-C再度反超C++ 开发者需知的10类工具 林仕鼎:架构设计与架构师 跨平台工具火拼:Icenium与PhoneGap Build谁属王者? 索尼终于想明白了:PlayStation生态走向开放 高达10亿美元,Facebook为什么要收购Waze? Cocos2D-X成全球第二大游戏引擎 仅次于Unity 亲爱的苹果,能不能别让应用太廉价? 陈晓影:一位女海归曲折的拓荒故事 IDG李丰:在中国,创业公司最好是一个One Man Company Google Drive新增“保存到Drive”按钮功能 可自行添加 腾讯CDC创始人唐沐加盟小米 总经理陈妍接任 老板我想辞职:因为小米100万元征集一张壁纸 客户端的函数怎么样用客户端用户输入的信息... 怎样改变MC的颜色。 病毒邮件。请问有什么办法解决 帮帮我这个菜鸟! PCI Device 驱动程序? 救我吧. link的时候提示cannot open file "mfc42u.lib"的问题。怎么解决? 如何才能上网呢 请问如何重绘一个应用程序的窗体或内部 Object 的边缘,就像 SPY++ 的 FindWindow Tool 实现的样式?? 救救我,给100分 NT4.0为主域控制器,有办法降级为独立服务器吗? VBA 如何调用 DotNet's WebService ?? dbexpress为什么在插入带自增长字段时候出错? 为什么不同的查询语句会有不同的效率? 我现在要开发一个游戏大厅,谁能帮我提供一些技术参数>?在线等待。 不是水贴:请求帮助,有上海师范大学的请进 紧急!那位有clearcase winnt 4.2 的注册码,高分相送!!!!! 论坛的表格要在注意什么?《我是个菜》 大家帮忙介绍一本书 帮帮我怎么把系统还原占用的空间还给我——老鸟们帮忙! 过滤问题:Query需要先选择一个表(通过ComboBox)然后从2个Edit内输入两个条件 关于stringgrid的翻页问题 寻找电脑方面的朋友 大家好,帮忙做做这题 大家如何保存自己地提问?? JTable怎样一行一行地显示? 我的程序 无边框窗口显示问题 求教各位大虾 VB数据库 如何知道某字段有这个姓名记录? 我想学一种C++的集成环境,是C++BUILDER还是VC 我完全没基础,请帮我走出第一步:汇编工具在哪下载?我想试试那个“两只老虎” 如何在还原Cookie中的中文字? 制做彩色立体阴影怎么做啊! 我的程序 请问有没有这样的公司? 2000 server 无法使用ADSL????? 我要和她分手。。。。。。。。 一个不错的网站,进来看一下吧! map 使用的几个小问题 請大家幫我做這個的標準譯文,謝謝!!! 就像做考題一樣,不要只說它在概意思! 新手上路第一问!Hello World都不能运行 这样的SQL语句怎样转化成能在mysql下运行的 学汇编,应用在什么地方?单从功能来说,汇编强大还是C++强大 replace语句的使用方法: 一个不错的网站,进来看一下吧! 关于软加密的问题???? 请高手,两个简单的问题?在线等待???急急!!! 关于ADOQuery1.refresh的问题 我的程序 石灰水和氯化铜溶液反应的离子方程式详细过程, 表2是从表1中截取的一部分,则a=多少 电离生成_____ 或 _____ 和的化合物叫做盐,例 _____和 _____ 与维持内环境稳态无关的A.剧烈运动时血液中的乳酸上升B.干渴时尿量明显减少C.人少量失血后,血量很快恢复正常D.炎热的夏天,人体内产生的热引起发汗而使体温不至于上升我们老师说选A,可 地球怎么会产升呢?我们生活在地球上,但奇怪的是,为什么地球一开始就存在呢? 可以说 电离时生成金属离子的化合物是盐吗反例? 自己怎么区别到底是藏银还是925银呢? 电影 造地球我在电视上看过一点,就是地球上的人都死了,就有一个人还活着,然后发生一系列的事情最后有个人又重造了地球,这是什么电影啊 雨水口连接管一般采用多少坡度 那本规范上可以看到 藏银、苗银、925银有什么区别?哪一种好一些?怎样知道是否是真货? 在造一个地球 有色金属冶炼锡会产出那些有害物质火法精炼. 在任意三角形ABC中有一点P使得2AP+BP+CP最小最好有图.. 盐溶液的电离程度大小怎么判断? 万智牌求讲解那位大神给个红白人类(打群殴)套牌用的法术,最好有防清场的. 在等腰直角三角形ABC中,∠BAC=90°,连接AD,求证BP的平方+CP的平方=2AP的平方P在B,C之间 万智牌 什么算生物咒语 万智牌 重力井 怎么用如题 澄清石灰水与氯化铜反应离子方程式 地球是谁造的? 我以后想做翻译,请问学哪个小语种好? 石灰水与氯化铜的反应有离子方程式吗 谁在作业帮上有财富值? 2012年电池的年产量约为多少亿只?是中国的年产量一共有多少亿个! 氯化铜溶液为什么不能和氢氧化铁反应 作业帮答题采纳给的财富值一般是多少 2011年产量比2012年多200千克,这句话中有哪几个数量?今天晚上要! 一道题问xxx的化合价为_____.这个时候,这个空需要些是+?价,还是直接写+?,加不加‘’价”这个字? 作业.作业.急…财富值没有了,求帮忙啊一位作家曾经说过,世上有四种话最有力量:朴实的话,真实的话,知心的话,不同的话.你同意他的观点吗?你有这方面的体会吗?请选择其中一个角度,谈谈 有机细胞是什么 氯化铜和盐酸化学反应式 氢氧化铁和氢气化学反应式A+HCl→CuCl2+H2O 这里A是什么? 作业帮的财富值有什么用 万智牌的转化什么意思 化合价基本练习题Na2FP03.已知F为-1价那么P的化合价为多少怎么做的详细点.讲得好的另外加分,一定要说明白点本人很笨.还有不是说化合价和不为零就交叉拉化合价吗? 我们常说的铁丝中米丝的具体规格参数请问铁丝中我们常说用8#铁丝,10#铁丝.这个是不是对应美标8GA,10GA?另外,我们常说的米丝是哪个规格的? 万智牌"康"是什么意思 万智牌如何加速 关于化合价的试题 甲基苯并三氮唑的 唑字一般是念发cuo 的音还是zuo的音回答哪种的都有,我当然知道字典上的发音是zuo,我是想问人们一般是发成什莫音,就像山东乐(lao) 凌乐的发音。 大神帮下忙,心累、孤单,也要坚持.汉译英 问几个化合价亚硝酸根 亚硫酸根 的化合价 、(2002·上海高考题)全年对太阳能量的利用率,森林生态系统远大于农田和态系统,主要原因是前者( )A、以木本植物为主 B、土壤肥沃C、不施农药 D、植物群体有分层结构为 姚什么魏什么成语 1、氯元素有多种化合价,他在高氯酸中线最高价,则高氯酸的化学式为2、下列5种物质中均含有碘元素,他们按下列顺序排列,(1)KI (2)I2 (3)HIO (4)X (5)NAiO4根据这种排列规律A、Agl B、NA 中和反应中化合物_______ 符合复分解反应条件,生成物中_____ 是复分解反应 姚什么魏什么 打一颜色成语 收入分配改革方案什么意思内容详解. 最全面的小语种紫金矿业翻译,金矿有资源的翻译优先. 什么魏什么赵的成语 细胞凋亡对内环境稳态的影响为什么说细胞凋亡能保证内环境稳态?稳态的概念是通过调节作用啊? 最全面的小语种五矿翻译,五矿又指的是什么 带魏的成语 PH计不稳定怎么弄 全数字式助听器有什么特点 人体内对内环境稳态起调节作用的系统是 【化学】问一个有关化合价的问题今天看重难点手册 看到这样一个化合物 O3F2(二氟化三氧?) 不是O和F都没正价么?那这个化学式的化合价怎么回师呀? 想知道什么是数字式助听器 请从下列词语中至少选用四个以上的词语,写一段以“云”为话题的文字,要求用上一种修辞手法(50字以内)峰峦 预兆 轻盈 匀称 崩塌 弥漫 一霎间 姿态万千 变化无常 PH计不稳定,数值老变,怎么办?就是PH计不管是测蒸馏水还是其他的标准溶液还是样品溶液都不稳定 ,数值一直变动…… 中国唯一最强的小语种地质工程翻译 叙利亚工程师开发新软件 可发短信预警奥巴马顾问称监控门对美与盟国关系构成联合国将向叙利亚民众提供28.6吨紧黎巴嫩商人因内线交易获1400万欧元德媒曝美国驻柏林大使馆涉嫌参与对默克张玮、张赫宣和金池将带粉丝组队飙歌安理会谴责马里特派团遇袭事件 吁迅速白宫宣传乳癌防治月活动 点亮粉红色灯韩国双胞胎整形“扭转命运” 戽斗脸变澳大利亚否认山火与全球变暖有关 总理澳大利亚一名17岁男生步行赴学校途中美国拟投资82亿美元治水 有望以此刺蒙古国成为“黄金国” 法德纷纷“带团法国征收75%富人税致LV老板移民 日本著名侦探解读最容易发生外遇的职业日本奈良县发现平安时代将棋的驹“醉象叙利亚工程师开发新软件 可发短信预警肯尼亚1998年恐袭受害者寻求帮助商合杭高铁拿到准生证 安吉将结束不通德清党群服务中心创新模式获得党员群众好莱坞大道变性人受攻击案第二名嫌犯落小微企业所得税优惠范围扩大 降低企业市场走势稍不如意 美指责人民币汇率又比特币ATM机登陆澳大利亚 监管部门中央政法委下发号召学习宣传张飚先进事日本前首相:参拜靖国神社违背政治承诺战火箭法玛尔将复出 纳什:伍登来了也整治“四风”首先是发现问题攻克“地球癌症”观山湖区用身边榜样凝聚发展力量毛建国:从XP退役感受“公司的力量”整治“四风”首先是发现问题攻克“地球癌症”习水主动融入重庆主城1小时经济圈贵州建设孔学堂感动孔子故乡人习近平分别会见以色列总统、东帝汶总理观山湖区用身边榜样凝聚发展力量浦发银行新增在线发汇业务小微企业新增就业主渠道作用凸显财务公司试点外汇集中运营冷空气影响中国北方地区 贵州湖南江西习近平分别会见以色列总统、东帝汶总理
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘