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

MySQL到NoSQL:数据的重思和查询方式的转换

HTML文档下载 WORD文档下载 PDF文档下载
在众多NoSQL数据库的轰炸下,身为数据工作者的你肯定在做是否迁移的考虑。而迁移后所面对的操作方式转换也是重点考虑的之一,Couchbase副总裁MC Brown认为过渡的首要工作就是对数据的重思,并讨论了查询方式的转换。

从关系型数据库转移至NoSQL数据库——比如从MySQL转移到Couchbase,你需要对你的数据进行再思考。至于为什么是Couchbase而不是MongoDB什么的,因为博文的作者MC Brown是现任Couchbase副总裁,所以你懂得;同时这篇Couchbase博文还涉及到迁移后对查询的影响。

以下为译文:

如果你有一个建立在MySQL上的数据库,你可能就会考虑是否需要以及更重要的如何将数据库(和你的应用程序)转移到Couchbase上。最大的绊脚石不在Couchbase建立或者是存储信息方面(尽管他们也很重要),而是数据的重思,你需要使用另一种方式去处理你的数据,然后对应用程序作出相应的变化。

下面将着眼如何把MySQL数据库结构转换成Couchbase Server,并针对两个数据库的查询方式改变进行讨论。

首先:数据结构的重思

MySQL(以及其它的SQL类型并且以表格为基础的数据库)强迫你将数据打造成表格的形式。你所有的数据就是一张表,当你储存复杂结构类型数据时,一个单独的数据片可能拆分成多于一张的表格。对于一些应用程序以及数据类型,如此存储数据是一个完美的逻辑以及合理的途径。而同样对于某些应用程序,使用这样的方法去存储数据并不是很适合。

下面看一个典型的例子,一个recipe(食谱)数据库。因为Cheffy.com是建立在MySQL之上,所以MC Brown对此非常清楚。基础的表格结构是一个核心表,称为recipe,包括了食谱的name、subtitle、description和servings。当然还有一些其它的recipe信息,比如:成分清单(Ingredients)、方法步骤(Method)、元数据(Metadata)以及通过一个独立的recipe ID连接到原recipe表的关键词(Keywords)。你可以在下图中看到这些主要部分:


这个结构有一些潜在的好处,一些特定的操作可以非常简单的完成。举个例子,比如说查询一些包含原理“carrot(胡萝卜)”的recipe(食谱)。你可以从Ingredients表中查找“carrot”,并鉴于这点得到一个匹配的recipe列表。通过使用join你可以获得一个recipe列表,从中获取他们的title以及一些其它的信息,通过搜索Ingredient表,使用join连接两张表中的recipe ID。


当然这种查询方法很简单,可以收集到一个食谱的所有信息。然而当你想给用户演示这个食谱时,将会变得很复杂。你可以通过一个单独的查询来完成,然而有时候通过几个查询来完成这个更容易,分别获取recipe、ingredients、metadata等表格的数据。在应用程序层,通过建立对象就可以自动的完成这些操作,同时这也是此类操作的基础方法。

对于许多用户和应用程序,通常会建立一个特殊的层去做这些事情,或者是选用一个对象映射系统将底层表格式的数据映射成应用程序使用的高等级对象。这里的recipe就是一个例子,在其它各种各样的应用程序中也有类似的存在,包括invoicing (invoice、supplier、 destination, invoice lines) 和 blog posts (post content、keywords、creator、 comments)。

这种基于表格的解决方案本身并没有什么问题,但是在这种场景下,key被跨表格的储存,同样这也意味着需要保持这几个表格的同步。举个例子,当某条记录被删除时会出现什么样的情况?你必须删掉连接到原表上的其它记录(不管是手动删除或者是级联删除)。类似的,当加载一个菜谱信息时,你可能需要运行5-10个查询。

Couchbase使用了一个不同的方法。取代将信息分割存入多张表格,在Couchbase中你只需要储存一个单独的结构(JavaScript Object Notation JSON)格式。JSON格式允许很多复杂的数据结构,包括字段、对象和标量类型,可以用它们组成一个完整的记录。这就意味着你可以使用一个“文档(document)”代替之前你使用多个表格来储存实体(recipe,blog post)。


现在只需要在一处就可以对整个recipe进行操作,也就是只需要一个操作就可以从Couchbase数据库中获得你想要的信息。

这里对内容没有强制的结构或者是定义,Couchbase数据库中的任何文档都可以储存任何的信息和结构。然而你还可以使用一个验证程序用来检查提供给数据库文档的结构,验证可以同时针对字段以及字段的类容。

鉴于这里没有严格的数据结构类型,它可以给存储带来更高的灵活性。举个例子,你不需要额外的操作就可以向recipe文档中添加新的部分“食谱的提供人”。

这里同样没有多重表这个概念,这里只有数据库,数据库中只包含了文档。如果你想让同一个数据库支持各种不同类型的信息,你可以向文档中加入字段。比如你可以如此来确认一个recipe:


那么type就可以作为标记在数据库其它的地方使用,用以识别(选择)你正在加载的数据。

其次:如果什么都是文档,那么你该如何查询

第一节中已经讨论过如何在MySQL上使用一条简单的SQL语句来获得一个原料中包含胡萝卜菜谱的列表。在MySQL中我们通过搜索ingredients表中与carrot匹配的recipe ID值,然后通过join从recipe表中获得recipe title。出于速度考虑,你可能会使用一个索引来提升查询的响应时间,用以保存单独的每一条记录。

在Couchbase所有数据都是文档,并且这里也没有嵌入的方法用以查询表格中的字段,因为这里既没有字段也没有表格。因为Couchbase中本就没有严格的数据结构模型(同样也没有方法让数据库引擎去确定自由格式文档中的字段),那么我们该如何完成在普通表格上的操作呢?

Couchbase支持一个构造称为view,而这个view与MySQL中的view非常神似;除下在Couchbase中,view是唯一从数据库文档中获得列表的方法,而在MySQL中view只是丰富了一个选择。View事实上定义了3件事情:

  • View中包含的信息结构。你可以想象成表结构的定义,就像你在MySQL中建立一张表。
  • 用以搜索的字段或者是信息。一个view将输出两项结果,key和value。Key将被传入方法以发现你需要搜索什么,更具体的说就是你需要查询的数据库内容。
  • 结构和key上的索引。索引同样用于提升搜索的性能。

View使用JavaScript在一个设计文档中进行定义,使用一个文档作为参数的函数。一旦view被构造,数据库中的每个文档都会提供给view,然后view查询并输出你需要的结果。不用担心JavaScript,JavaScript将只在服务器上执行(不会在客户端上执行)。

现在回到MySQL,一个没有where的查询,查询输出选择的字段,并且在输出结果中构造一个匹配行的列表。下面,详解一个SQL语句:


当在MySQL上运行一个查询,MySQL服务器从一张或者多张表中取得信息,然后构建输出结果列表:


在Couchbase中,View从单一的文档中获取记录,并且在处理过程中附带建立一个索引。结果则是view抓取的所有文档列表。


在MySQL中执行一个带where的查询,索引一般被期望帮助你查询需要的记录:


而在Couchbase中,生成的view就是你的表格,当你对view进行查询,Couchbase使用这些键的值(以及生成的相关索引)和过滤后(你指定)的返回信息,生成最终的匹配列表。


总结

上文主要针对MySQL到Couchbase的转变,通过上面的两个步骤基本上可以完成这个过渡。然而一些更高级的必然需要一些更多的思考,MC Brown在Couchbase博客同样发布了转换的第二部分,包括了更多高级查询的思考。(编译/仲浩 审校/王旭东)

原文链接: How to Move from MySQL to Couchbase Server 2.0: Part 1

推荐阅读: Moving from MySQL to Couchbase Server – Part 2

“  第五届中国云计算大会 ”将于2013年6月5-7日在北京国家会议中心隆重举行。猛击报名! 

相关活动已经火热启动:

2013中国云计算大调查,每周大奖等你拿! “ 

Innovation Cloud 2013云创新产品与应用项目征集,欢迎研发者、团队和创业企业参加! 

Kiip 90后华裔励志故事:从遭解雇到誉满全球 大数据基因测序的成本逼近1000美元:个性化医疗的时代来临 携程开放平台发力 将实现旗下产品全流程API支持 Puppet labs发布2013自动化运维报告 “国”字号开发者:航旅纵横负责人薄满辉专访 金山云杨钢:核心算法保证安全和低成本 加速软件交付 企业级模拟测试服务CA LISA受追捧 盛大云业务重点转向自服务 转战中小型企业:Prediction API请求一个月内飙升至7亿多次 利用光子 耶鲁大学研究人员让量子计算机离现实更近一步 技术为王的云计算会让IT部门消亡么? 从Discuz到APP:安米移动社区转化工具 覆盖全领域:Google、Facebook、Twitter等大师的最佳推荐 苹果CEO宣布更改保修政策 并向中国用户道歉 拒绝使用现有Web组件的6个愚蠢理由 Github宣布支持SVN方式访问 iPad,正在改变什么? Go Mobile:行业大牛谈行业应用开发 亚马逊Cloud Drive新增文件同步功能 对抗Dropbox 35万奖金发放,BlackBerry 10大赛奖项揭晓 超越Google Apps:排行榜前10的相关云应用 荣耀终将消散 全球第一台千万亿次级超级计算机退役 谷歌已推免费Android和iPhone版Quickoffice,微软你呢? 用于响应式设计的9个CSS技巧 微软Surface Pro正式登陆中国市场 售价6588元起 岳雷:Windows Server 2012虚拟化性能提升巨大 陈健:Windows Server 2012让企业轻松管理IT 智能手机:革命已经波及到阴间 兄贵草泥马:重口味单机移动游戏为什么能火? 最炫HTML5框架Famo.us 将免费面向开发者 MySQL到NoSQL:数据的重思和查询方式的转换 100分 求《UML与Rational Rose从入门到精通》 急!各位高手关于要把多个DC放到一个pDC上显示的问题。 急。关于ppc和sybase的问题 请问编一个WINDOWS画笔 谁有c434009A主板的驱动程序。 请问在windows下如何实现像数据库一样的读、写锁? 为啥我在InstallShield中调用DLL中的函数总是出错呢? 如何能在HTML控件显示区域显示“....(指定的文件名)不存在”? 请问如何把TIF格式转换成JPG或GIF的格式?? 代理不能定时执行,请指教,谢谢。 怎样与外部数据库建立联合查询? 如何接受来自vbscript的字符数据列表 怎么在Gtk+的gnomemessagebox显示中文? (在线等待,急!)在vc中怎么使用datagrid控件 我使用的是odbc访问数据库 好急的问题,有关于SMS的接收字符处理问题,想了好几天没有结果 那位兄弟手头上有ASP.NET高级编程的电子书? DataGrid 控件问题,帮帮我把,朋友! automount? 一个比较难的问题! 关于datagrid的问题 在线等待 在cmd编辑器中用java运行已编译的文件运行不成功怎样解决 各位帮我解决一下这个问题!!!谢谢 关于ResourceManager的疑惑? 两台机器无法访问? 大家有没有听说过zebudom.js这个javascript的API?请问哪里可以下载它? 模块的连接 如何用php开发一个在线语音聊天室? 请问:有谁能提供Microsoft Project 2002简体中文专业版下载地址????急用!!!!!! 《The C++ Programming Language》有没有中译版? 请高手帮我看看: session的范围 硬件加、解密卡合作 请问那里能下到C或者C++的编译环境? 我的网页做好了,在我自己的机子上显示的很好看,在别的机子上有的显示的和在我的机子上显示的一样,很不错,但在有些机子上显示就变形了 怎样在文件中查找指定的字串? 为什么这两个查询都不能运行呢? 请教有关比对数据库的思路 运行结果出错!!!!!!!!!! google主页的问题(在线) (在线等待,急!)对话框中画图,超过了对话框大小,但是滚动条不能用 jbuilder7+jboss的配置问题? 求教:用UML做分析设计工具、用JAVA开发的一个办公管理系统的详细时间节点计划书。 數據庫數據顯示問題///急,在線等!!!!!個位幫幫忙? 讨论一下,eregi和strpos 为什么这两个查询都不能运行呢? 集成多文件夹操作窗口的软件有吗?有的请发QQ;6138215 怎么获得checkbox组中被选中的部分? sybase表中有没有自动编号的字段啊? 问一个很菜的问题?(在线等……) DOMINO的B/S开发:如何自动更新一页面中的多分类新闻标题AS WWW。WXRB。COM 解一元一次方程时,一般要怎样把方程化成一般形式? 吃一垫,真能长一智吗 如右图,某小区规划在长32米,宽20米的矩形场地如图,某小区规划在长32米,宽20米的举行场地ABCD上修建三条同样宽的小路,使其中两条与AD平行,一条与AB平行,其余部分种草,若使草坪的面积为566M 问一下仿一本男孩子必读的书写钢铁是怎样炼成的读后感有熟悉这个的吗?不好意思,麻烦各位{随机数K 吃一埑,长一智.的教育意义是什么? 谁认识这树?就是结这个果子的树 麻烦看下仿一本男孩子必读的书写钢铁是怎样炼成的读后感有人了解的说下吧, 吃一垫,长一智. 谁认识这是什么树树枝和树杆都是弯弯曲曲的再传一张 一些唯美的句子 “三下乡”社会实践是哪一年开始的 作为教师你感到最大的压力是什么? 根据句意,在括号里填上与“站立”意思相近的词.(不可重复)1 如今,一座座海洋石油平台已( )在海涛之中.2 月球上只能看到广袤的荒原上高山( ),巨石嶙峋.3 社会主义的中国像巨人一 英语翻译要写在简历里的 务必要准确 英语翻译再求帮忙写一篇以这个为题目的英文演讲稿,二百单词左右 台风暴跳如雷,像头疯狂的巨兽,呼呼地向着城市扑去,用了什么修辞手法?急 我要名人求学的例子,或有关于求学的名言.急, 什么是《琵琶行》全诗的主旨,更是诗人与琵琶女感情的共鸣. 他暴跳如雷,像___________.(比喻句) 是吃一堑,长一智,还是吃一蜇,长一智呢?麻烦知道的回答一下. 求教,我语文不好, 台风为什么暴跳如雷?急, 英语翻译Courage is the ladder on which all the other virtues mount.还有这句Despite all the life danger,with one selfless act from one common person,someone is saved,A hero is made. 请问猪能上树吗? 《故乡的桂花雨》的主题是什么? culture smart or science intelligent原创文章!明天就要用! 英语翻译HINWEISE ZUR FESTSTELLUNGSPRüFUNG:Die Feststellungsprüfung erfolgt nach folgenden Kriterien:1.künstlerische Gestaltungsf?higkeit2.Realisierungsf?higkeit in den gew?hlten künstlerischen Medien3.künstlerische Konzeption und Intensit?tD 我能行 主题班会的回答内容,尽量多.(中学生) 真情树 读后感 请问有人知道幼儿园中班舞蹈课课教案要怎么写哟?有点急,打心底麻烦各位蓄 什么样的女人最讨人喜欢拜托各位了 3Q 斯大林信基督吗?俄国人不都是信天主教么,但他(斯大林)是共产主义者,是不是无神论?请懂的回答 参加辩论赛,需要的条件. 鸽子蛋书面语叫什么? 有人看过如果树知道么,有什么感想 拜托看下幼儿园中班舞蹈课课教案要怎么写哟?我想知道到,打心底麻烦给位朋友了锈 "蛰"这个字用拼音怎么打? 我相信有神 但我却不信奉神 这算是有神论还是无神论我相信神是因为我觉得神只是比一般人强的人或生物,所以我也不信奉神 英语翻译谁知道有什么德语翻译工具可以翻译整页或整篇文章的 ,一段一段的也可以.急用 1.快车和慢车同时从A\B两地相向而行,3小时向隅后两车按原速继续前进,快车形式2小时到达B地,这时慢车距离A地还有110千米.求A\B两地相距多少千米?2.有一块铜与锌的合金,其中铜与锌的比是2:3, culture smart or science intelligent?用这个作演讲题目,着重说哪方面比较新颖啊?演讲内容是必须在culture smart和science intelligent两者中选一个来讲,还是可以说他们都很重要,相互依靠之类的? 英语翻译演出加油、中文4个字?德语这么长?能不能请1L的翻译下你写的? .....(要用比例等式来计算...):只选最好的答案..1.师徒两人合做了84个零件,师傅5分钟做一个,徒弟9分钟做一个,要求在相同的时间完成,每人应该分配到多少个零件?2.走同一段路,小玲要12分,小丽 请高手帮忙解析culture smart or science intelligent这个是2009年CCTV杯的题目 我拿去问来自美国的外教 她说这个题目有错误 她从来没见过culture smart的说法 从这个短语的结构到较为深层的含义 尽可 我都迷茫了, 上上月书面语怎么说 电机互锁的问题6台电机设M1-M6要求依次从M6到M1 互锁 (M6工作才能使M5工作 , M5工作才能使M4工作.)高手帮我弄个电路图啊 谢谢降序使用辅助常开触点即可实现。。。 这个我也不会啊 选辩论题目,应遵守什么样的标准? 什么字站着和躺着变成不同的两个字?比如:“田、口、回”这些字站着和躺着念都是一样的,但哪两个字站着和躺着念是不同的呢? 吃一欠长一智什么意思? cultural smart or science intelligent 这可是当时什么(填关于轰的词语)的新闻 吃一寸 长一智什么意思 杭金衢高速公路义乌出口有几个,分别是…能说清楚具体位置最好,就是杭金衢高速公路义乌下来后会经过什么路… 这可是当时很什么(填关于轰的词语)的新闻 请教下仿一本男孩子必读的书写钢铁是怎样炼成的读后感J我想知道到,我在此先谢谢大伙了7dX ,某小区规划在长32米,宽20米的矩形场地上修建三条同样宽的3条小路,使其中两条与AB平行,另一条与AD平行,要使小路的宽为2m,那么剩余的耕地面积为多少平方米 请问含义是“少”的汉字有哪些,包括古代 人为什么要吃一垫才会长一智?不是有句古话;"吃一垫.长一智"人为什么要吃一次亏才会长一智呢?###不吃亏就长不了智了吗?$$$有时的一次亏会让你损失很多!我就以这为例:我在盛大以保中被骗 某小区规划在长4米,宽26的矩形场地上修建三条等宽的小路,其中两条与宽平行,一条与长平行,其余种草,草地面积为144平方米,求小路的宽 美华裔留学生派对后公寓猝死 疑酒精中日本“菜鸟”教师多:不会点火柴不敢拿纽约遭飓风袭击一周年 数千灾民仍无家法国两男子晚间持械抢劫 得价值70万泰辣椒酱工厂被指呛辣气味扰居民在美遭荷兰博物馆展出139幅珍贵油画 作品法一抢劫犯落网 曾为iPod及8欧元漫画之国比利时:热衷特立独行“反英雄美撤军前在阿富汗军事成果受侵蚀 安全阿富汗政府被曝将在美撤军后与“基地”乐高拟在韩建东亚首座乐高乐园 预计斯诺登爆料NSA早已入侵了雅虎和谷歌以色列释放26名巴勒斯坦犯人 亲人兴印尼一处豪华别墅内被发现暗藏多种珍禽研究称英国社会阶层八百年来几乎未发生韩国海域15日沉船事故一失踪中国船员《世界新闻报》窃听案8名被告中有3人日国会议员山本太郎向天皇递交书信 或美媒称奥巴马支持率跌至新低 挫折积累印尼一处豪华别墅内被发现暗藏多种珍禽德国两大党举行第二轮谈判 部长人选仍思享︱千年一叹,女儿国的愁结与幽怨学会等待:看罗斯科的画Domvs London与Juniu毁了孩子一辈子的8大育儿旧俗,很多妈中国最危险的村庄!!!2岁宝宝经常哭闹不爱吃饭,原来是因为不是农村电商也非农村O2O 别再胡乱中国期货祖师爷:中国的“洛克菲勒”荣P2P理财与其他赚钱方式的对比视频 | 吸血鬼开心的聚会,结果惨剧红枣双豆浆【重磅教学干货】如何投资股息收益型股红烧排骨栗子手机碎屏险,小生意需要大生态只因相互换了一张车票,5年后命运截然浙大老师火了!据说这是近日最火的视频不能丈量世界,至少可以读懂中国直播APP“17”正当红 却惨遭苹果明星戛纳没作品走红毯 本末倒置有意思低调的送药公司,隐秘的地下根系 创意无限——让家里每个角落充满新鲜
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘