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

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云创新产品与应用项目征集,欢迎研发者、团队和创业企业参加! 

VB中自制文件搜索器 Windows 初始化文件的修改 -VB资料 Word 97与WPS97的完美结合 -VB资料 比较两个文件-VB资料 采用递归算法删除带有多级子目录的目录-VB资料 菜单项的动态装入 -VB资料 处理加了密码的MDB文件-VB资料 VB创建临时文件 从公共对话框控件中提取多个文件名称 -VB资料 从全路径名中提取文件名 -VB资料 打印MsChart之类的控件 -VB资料 谈谈在VB6.0中如何使用资源文件进行编程 动画图像分解在VB动画设计中的应用 多重文档界面设计方法-VB资料 恢复回收站中的文件 -VB资料 VB获得位图文件的信息 VB获得文本框中光标所在行的内容 VB获取程序工作路径的方法 VB获取文件或文件夹属性 基于VB的通用折行打印程序 基于VB和EXCEL的报表设计及打印 VB建立多级目录 -VB资料 VB建立快捷方式-VB资料 VB建立文件关联 -VB资料 将RichTextBox 之中被选取的内容复制到剪贴簿-VB资料 将我的程序的文本直接送到WORD中(不用粘贴)-VB资料 开启文件属性窗口 -VB资料 快速读取 TextBox 第 N 行的资料 -VB资料 快速选择里List全部项目-VB资料 VB利用 App.Path 读取「应用程序所在之目录」 VB利用 EM_LINESCROLL 信息控制 TextBox 的卷动。 如何查找一个对话框的owner窗口? 我应该选择VC还是C#??? 在系统启动时至少有一个服务或驱动程序产生错误,详细信息,请使用事件查看器查看事件日志 操作系统是如何发现新插入的设备的? 关于对Com1,Com2读取条形码的编程 帮个忙,先,谢了! 接着那个堆栈问题,创建了,试验了。但应用时出现了对创建错误? 我想在对话框上输出一个char数组,用什么方法比较好????????????? 怎样移动较大副图片的时候避免或者尽量减少闪动? 怎么把网络编程和数据库联系起来 如何贴背景透明的按钮?急,急,在线等待!!! 奇怪了! 请问如何获得居于网中一个工作组下的所有计算机?? 还是一个dll内部变量的问题。 怎么回事? 送分! 大家看看 请问MSDN的帮助怎么获得 怎么样获得一同名text表单域的值? **C++语言的设计和演化** 图书好贵呀!!! 求表达式正确与否的校验算法 怎样控制DllMain?在哪里可以编辑这个函数? 同一个句柄对于所有进程是否一样? 我的red hat linux8 怎么才能配置声卡 如何判断一个字符串是否是常数 《Java与模式》一书已经出版 --- 作者 各为高手,如何能够看到我打开网页的session的值 关于 Geforce256 的问题. 一定给分!数据库查询问题 solaris下有没有用过syslog编程的? 推荐个好点的flash的控件吧 数据库中的Currency类型字段 初学pb8请指教!多谢! 如何让richtextbox支持语法高亮显示 请问rtsp是什么协议? 函数返回临时指针到底如何处理较好? 原来在bcb4下的程序为什么在BCB6下运行出错? 我是新手 如何用代码关闭显示器和硬盘??????? 如何打印PictureBox中的所有内容,分不够可以再加 问一下大家的下载和注册的比率好吗? 我的IE怎么了? 这是我第二天的C#学习笔记,敬请高手指教 ★★★ 在线等待,高分求对 ★★★ >>>>>>> 虞美人身佩玉蝴蝶蝶恋花 linux 热启动后能不能再进入winme? 大家说高中毕业自学的c#程序员有可能找到工作吗? 急!如何给DBGrid对应的列字段规定显示格式 用VB将图片插入到Excel或WORD里 请问文本压缩目前有什么标准? 怎么控制小数点后的位数????? Oracle Developer的B/S结构是如何实现的? 在图①△ABC中,∠ACB=90°,AC=BC,直线MN经过点C,且AD⊥MN于D,BE⊥于E.(1)说明△ADC≌△CEB ..(2)说明AD+BE=DE(3)当直线MN绕点C旋转到图②的位置时,试问AD,BE,DE具有怎样的关系?请写出来并加以 英语翻译怎么翻译the design should be approximately 35% each for feed and metering sections with the remaining 30% as transition zone The teacher,with the student is going to work on the farm this sunday 为什么用is 如图1,在△ABC中,∠ACB=90°,AC=BC,直线l经过点C,AD⊥l与D BE⊥l于E 1,求证△ADC全等于△CEB 2.当直线l绕点c旋转到图2的位置时,DE,AD,BE且又怎样的数量关系,比证明kuai 求一部明朝的电视剧小时候看过的,内容具体是崇祯有两个女儿,2女儿很坏,通敌叛国.我只记得那么点了, The teacher with the students often ___ to the moutains.A.go B.are going C.goes D.is going 急...A:Hello!What are you going to do?B:I am going to the shop to buy something for our evening party.A:Evening party?_____________B:Yes,we are.A:________________B:Toninght.We'll get our teachers and classmates together.A:can you tell me something m 为什么很多武侠剧都是发生在明朝? The teacher is giving ___ the new books to the students填介词或副词 [How long have you been coming here]这一句有什么错误,该怎样改? 有一个地方,不管哪个方向都是北,那么这个地方在哪里 扑克牌A代表什么意思 In the 12 months since I last wrote to you,a lot ----(happen)to me 人固有一死的固是什么意思? 生物分类依据病毒分类吗?立克次氏体分类吗?真菌,动、植物和微生物的分类依据,通俗点。按照界、门、纲、目、科、属、种来分。 his young brother once wrote to him in 2005,and 〔hasn't been heard from〕sincehear from意思是收到,那么为什么要用been heard from的被动句? 我们可以在互联网上与彼此聊天. We can chat with each other ____ ____ ____. 描写树木茂盛的成语(10个以上)急, It has been two weeks since I last wrote to you.意思? 在ΔABC中,∠ACB=90度,AC=BC,直线MN经过点C,且AD垂直与MN于点D,BE垂直MN于点E.说明ΔADC全等ΔCEB 生物分类的依据动物的分类单位不仅要比较外部形态,还要比较动物的_____和______. 珠江夜景作文300字 She should help her mother ()housework 沙漠的动物怎样生存 沿珠江哪里看珠江夜景 She didn’t help her mother do any housework until she was fifteen同义句这有两个空 help her mother do any housework 这有一个空 she was fifteen 问下be going to 的句型是不是be going to的句型后面可以加动词啊?yes,i am to go to learn that how to driveyes,i am to learn that how to drive 这两句话语法上是对的么?有什么区别 如图,在△ABC中,∠ACB=90°,AC=BC,直线MN经过点C,且AD⊥MN于D,BE⊥MN与点E,试判断S△ADC与△CEB全等吗? 英语经典习题:情景对话Allen:hello!Mike:hello._____.May I speak to Allen,please?Allen:_______.Mike:Hi,Allen,Hwo are you?Allen:Fine,thanks.Hwo are you?Mike:I‘m fine._____.Allen,I need some help.____.Allen:Sure._______.Mike:There is somethi 描写树木长得茂盛的成语(最少4个)那么 英语翻译楼主给你20-80的悬赏分.要多少悬赏分.自己写在答案边. 两道英语情景对话题,-How is it going,Tom? - ( ) A.Oh,okay,I guess. B.Not doing wrong. C.Sorry,I'm not so good. D.Noting,thanks 2.-Can I help you,sir? -( ) A.Yes,you can help me. B.No,I don 为什么植物开花季节不同?写说明文急需, 英语翻译我可以满足你的要求.*_* 我国的珍贵的历史文物有哪些 michael is going to be a singer when he grows up (对划线部分提问 划线部分是a singer 现在市场上塑料粒子价格大概是多少啊~ 做塑料薄膜袋的~ 我国珍贵历史文物只要名【如秦兵马俑】. I'm going to take you to the library.(对划线部分提问)划线部分是有.给个完整的句子 我国有什么地方一年四季都冷?最热时候温度不要超过20度?有没有这样地方?感觉西部一带,冰山脚下应该可以,但是,那种地方应该很偏僻,外地人不好生活,有没有比较好找工作的地方,不然,去了 中国的历史文物有什么要二十个 how will you go there?by train. Sally left the school last month.sally()()()from the school since last month 同义句转换 像从前一样的好朋友是什么词 how soon will you go there?这句话有语病吗 中国有哪些地方一年四季如春 像从前一样做好朋友是什么词语 How will you go there? 请问中国境内一年四季如春的地方是哪里四季天气晴好的地方都有哪里 急求 在哪个季节开花的植物,花芽的形成最需要光照?( ) A春季 B夏季 C秋季 D冬季 请速给我一篇题目叫‘红色少年’的作文 只要内容就是写树立自己远大理想等等 关于夜景的好词好句 绿色开花植物长 到一定阶段产生花芽绽放称称开花对么 原题是判断题 争当热爱祖国,理想远大的好少年如题,200字左右的国旗下讲话稿,急,这两天要,好的话可以加多二十分! (1)黄旗的面数是红旗的2.5倍,黄红旗共70面,红旗黄旗各多少面?(2)黄旗的面数是红旗面数的2.5倍,黄旗比红旗多45面,红旗黄旗各多少面? 和秦兵马俑同样珍贵的历史文物有哪些? 做爱国、理想远大的好少年的作文一篇400字 如图,在△ABC中,已知∠ACB=90°,AC=BC,直线MN经过点C,AD⊥MN于点D,BE⊥MN,求证△ADC全等于△CEB这个 商店有红旗45面,黄旗35面,绿旗的面数是红旗和黄旗总面数的1/4,绿旗有多少面? 除兵马俑外,我国珍贵的历史文物有( ),( )
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘