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

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

FlyingDaggers团队专访:不浮躁,用心做真正的原创游戏! IT巨头混战:谷歌、苹果、Facebook以及亚马逊的四国演义 乐视TV:智能电视平台——Android 开发者的新空间 TIOBE 2012年12月编程语言排行榜:Objective-C冲刺卫冕年度语言 11月份浏览器市场份额 IE10已占据0.51% 亚洲高科技公司正在分享惠普、戴尔和IBM的云“午餐” Groupon创业启示:进军海外,请三思 天才之为责任:Unity CEO谈论Unity 4.0游戏引擎 中文版Evernote百宝箱上线:开发者海外推广新渠道 360产品被爆收集用户隐私 桌面安全路在何方 销售额达一万亿元 阿里巴巴成世界最大电商 共享软件海外营销策略与实战分析(武汉站)成功落幕 你未必知道的CSS故事:揭开leading的面纱 2013年 影响Web发展的5类API 《Warcraft是怎样炼成的》:多人对战、战争迷雾以及AI HBTC精彩回顾 Hadoop专家分享大数据技术工具与最佳实践 苹果iTV规格泄露:iOS应用开发的新蓝海 Facebook觊觎微信鼻祖WhatsApp,但谈不上收购 首款社交API应用 Facebook Messenger for Firefox正式上线! 共享软件海外营销策略与实战分析(沈阳站)成功落幕 移动之伤:为什么山寨游戏比原创更火? IBM在京发布PureData 主打数据交易处理、操作分析 Intel发布Hadoop免费版 全力拓展生态圈 突出图片搜索:微软向测试人员开放Socl社交搜索 豌豆荚创始人:和巨头竞争,我们拼产品和技术 “互联网女皇”报告解读:智能电视大趋势 苹果扩大其北卡罗莱纳州燃料电池发电场规模 Oracle回收站使用全攻略 微软这次很诚实:IE真的糟透了 Facebook进军短信业务,挑战微信鼻祖WhatsApp 从菜鸟到专家的五步编程语言学习法 什么是nt service编程 有关串口编程 请教: DDL事件审计的问题。 自定义组件问题,急! 怎么用Ctrl+A 来触发一个按钮的click事件? 急问:vba用ado对access操作,2000下能用,98下不行,要疯了! 关于数据库服务器的费用预估 注册表和主页的问题!!!!!!!!!!!! 我熟悉C++,请大家推荐几本学习JAVA的基础书! vc转java,怎么转啊。 成语接龙----大家一定要做最长的水贴!!!!!! 打算攒台电脑, 请水友帮忙推荐一个 主板(集成声卡)+ 显卡 , 谢谢 ASP新手请教——动态显示的问题 再开一贴,请同行帮忙,也是100分 如何在DataGrid中处理光标离开某个Cell时的事件? [提问]请问哪里有象记账凭证现金输入式的控件?! 谢谢。 怎样在win2000下隐藏linux的分区? 如何查看表的定义及约束 控制条与对话框的问题 那位老兄有<windows防火墙与网络封包截获技术>的光盘,我光有书,没盘 請問怎樣獲得本頁的文件名(除文件名其他部分都不要﹐包括在框架中使用正確) ForBeginner(No.1):Keyword->RedHat8中文显示,AC97,xmms播放mp3 哪位大虾帮我看看这段代码,不胜感激 能否在JSP,Servlet中用asp(js)写的页面 浏览器被黑--恶意加锁:win98的ie 5.5浏览器打开时出现“分级审查窗口”,必须输入正确的密码才能使用? 请教一个关于微软件的.net开发环境的问题?! 有谁用过“微软公文盖章系统” 50分悬赏||____||一个常识问题 java界面控制 有关ASP+ACCESS的查询数据出错,报错 “超出系统资源。 ” java界面控制 求一用php实现压缩/解压缩的程序. 请问在WORD200中有什么好的方法在下划线中输入文字,而下划线不随字体而改动? Excel中保护工作表? 请问使用16倍速的刻录机能刻32倍速的盘吗 MYSQL如何实现自动删除数据库中的记录 紧急提问:CB中那些类用.操作符 请问一个概念的问题:??????????????????????? 如何生成报表文件啊? 装了oracle8i以后怎么登陆不了? 如何按照记录号转到指定的记录?不用SQL 用过magicskin的请进。 无法于数据库建立信任连接的问题_高分有送! 偶这个星期到深圳去,不知道在深圳有那些途径可以找到工作的? 手机掉到马桶里你会怎么办? 各位前辈帮忙看一下这个语句怎么解决(这是一个关于SQL语句的问题) 请教 java 命令的用法 用session跟踪用户的问题。 Xml中查找最大值! 请PHP高手推荐几本高阶的PHP书籍 偶这个星期到深圳去,不知道在深圳有那些途径可以找到工作的? 盐城丹顶鹤自然保护区怎么样 什么的丹顶鹤 阿贝折光仪读数区上半部分是什么的读数, A,B两地相距Skm,甲乙两分别从AB两地同时出发,若同向而行,经过a小时甲能追上乙;若相向而行,经过b小时两人1.用含a,b的式子吧表示v甲/v乙2.已知(v甲/v乙)平方=2 求证 b/a+a/b=6 仙鹤的脚是什么样的 关于线性代数问题1.证明:若果向量a1,a2,a3线性相关,测向量a1,a2,a3,a4线性相关.2.举例说明删除结论的逆不 一列快车与一列慢车同时从甲、乙两地相向而行,开出4小时后还相距240千米,已知快车行完全程要10小时,快车与慢车速度的比是3 :2,甲乙两地相距多少千米?分析也要有啊! 一个苍蝇吃掉一个苍蝇等于几个苍蝇 学校有两块宣传黑板:“校园卫生板”的板长是宽的5倍,周长是72cm;”校园通知板"的长是宽的2倍,C是96cm.那一块面积大?大多少? 一列快车、一列慢车同时从甲、乙两地出发相向而行,开出4小时后还相距240千米.已 一辆汽车从A地驶往B地,前1/3路段为普通公路,其余路段为高速公路.已知汽车在普通公路上行驶的速度为60km/h,在高速公路速度是100km/h,汽车从A地到B地共2.2小时,提一个二元 一次方程组的问题( 1、13个十分之一里有()个千分之一.2、学校里有两块宣传黑板:“校园卫生板”的板长是宽的5倍,周长是宽的5倍,周长是72厘米;“校园通知板”的长是96厘米,那一块面积大?大多少? 圆o的直径ab为10,弦ac为6,角abc的平分线交圆o于d,求cd如题 外甥打灯笼歇后语要有谐音 一根竹竿截成两段,第一段截去3/5,第二段截去3/5米,两段竹竿的长度,哪段长A.第一段长.B.第二段长,C.一样长,D.不确定 小明看一本书,第一天看了总数的4分之1,第二天看了第一天的3分之2,第二天看了50页,这本书共多少页? 把铅笔放在杯子中不同的位置,会看到不同的现象,是什么原因 两个答案急 一块长方形黑板,长183,宽98厘米这块黑板周长是多少 小明有一本书第一天看了总数的5分之2少7页第二天看第一天的5分之2多10页,还剩下96页,这本书一共有多少页 甲乙两人骑自行车从相距S千米的的两地同时出发,若同向而行,甲经过a小时追上乙,若相向而行,经过b小时2相遇,设甲速为X千米每小时,乙速为y千米每小时,则X÷y=多少刚刚那个是2人相遇 一根长10米的竹竿,每一天截去一半,这样连续截5天后,剩余竹竿长____________米. △ABC内接于圆O,AB是直径,CD平分∠ABC交圆O于点D交AB于F弦AE⊥CD于H 求证OH⊥AC若AC=6,BC=4求OH的长!各路神仙救救中学生啊!不能用相似做!紧急!题干有误,是平分角ACB 甲乙两人骑自行车自距K公里的两地同时出发,若同方向而行R小时后快者可追上慢者;若相向而行,T小时后两者相遇则快者与慢者速度之比为( )A.r/r+tB.r+t/rC.r+k/r-kD.r+t/r-t 10米长的竹竿,每4/5米截成一段,一共可以接成几段?正确列式是( ) .1、10×4/5 2、10+4/5 3、10-4/5 4、10÷4/5 5、10×(1-4/5) 圆O与圆A相交于C,D两点,△ABC内接于圆O,弦CD交AB于点G,连接BD若圆A与圆O的直径分别为6根号5,15,且CG:CD=1:4,求AB和BD的长 甲乙两人骑自行车自距K公里的两地同时出发,若同方向而行R小时后快者可追上慢者;若相向而行,T小时后两者相遇则快者与慢者速度之比为( )我觉的这道题有点错,但是还是请哪为高人帮我 一根10米长的竹竿,先截1/2,再截1/2米,这时还剩( ) ① 5米 ② 9/2米 ③ 0米 甲、乙两人骑自行车从相距s千米的两地同时出发,若同方向而行,t1小时后快者可追上慢者;若相向而行,t2小时后两者相遇,试求快者与慢者的速率之比 云的谚语 一种运动鞋原价228元,现在打六折出售.学校要给排球队买12双运动鞋,一共要多少元? 盐城丹顶鹤自然保护区的英文文章英文的 高屋建瓴 是什么意思? 以眼光为话题的作文这是作文竞赛的话题,我写的是关于不要在乎他人的眼光,但老师说要改,希望大家给我提供一些素材或者现成的可以用来借鉴的作文~忘记说,这作文要八百以上 一本180页的书,看了总数的五分之二,第二天看了总数的三分之一,还剩多少页 10个 写云的谚语 元旦期间,一种旅游鞋八折优惠,这种旅游鞋原价358元一双,若按优惠价出售每双比原价便宜多少元 关于丹顶鹤的歌曲 用蜈蚣泡的酒有些什么作用? 以眼神为话题的作文700字,不抄袭,可写多件事,运用小标题 我在课室充电被收了手机..怎么写保证书! 沼泽地和松树林哪个更适合丹顶鹤 电缆桥架与线槽的区别是什么? 急求以“目光”为话题的作文 请问海带,丹顶鹤,仙人掌,长颈鹿各生活在哪里?为什么能生活在那里? 高屋建瓴的意思 今年爷爷的年龄是孙子年龄的7倍,3年前爷爷的年龄是孙子年龄的10倍.今年爷爷和孙子各多少岁? 丹顶鹤的样子是怎样的? ph=5的H2SO4溶液,加水稀释到500倍,则稀释后[SO4 -2-]与[H+]的比ph=5的H2SO4溶液,加水稀释到500倍,则稀释后[SO4 -2-]与[H+]的比值为? 手握盛水的茶杯观察指纹可以看到指纹()的像,这是因为茶杯起到了()作用. 今年爷爷的年龄是孙子的7倍3年前爷爷的年龄是孙子的10倍则6年前爷爷的年龄是孙子的多少倍 有没有穿越成仙鹤或者白鹤或者蛇的小说 小明上学的速度是每分钟50米,放学回家的速度是每分钟30米,他上下学的平均速度是多少?老师说是37.5米每分,可是我怎么也想不明白,这到底是为什么呢?我觉得应该是40米每分才对呀!谁能 今年爷爷的年龄是孙子的7倍,三年前爷爷的年龄是孙子的10倍,则6年前爷爷的年龄是孙子年龄的多少倍? 请写出2个表现求学艰难或勤学苦练精神的典故 没有砣的秤杆,到哪里都翘尾巴(打—生肖) 今年爷爷的年龄是孙子的7倍,3年前爷爷的年龄是孙子的10倍,则6年前爷爷的年龄是孙子的多少倍?(算式方程都可以) 一条8米长的竹竿,截去了1/4后又截去1/4,这条竹竿还剩()米? 谁能帮我解释一下这个电路图的构造. .为什么丹顶鹤被称为“仙鹤”? 线性代数有关问题线性代数中秩与方程组与线性无关等等有什么关系 无人机击毙索马里“青年党”高官美国驻也门大使馆虚惊一场 婚礼烟花被美国得州一男子五地疯狂射杀 致其母在利比亚枪手打劫央行5000万美元日防相称“中国危及和平” 中日关系陷美国十年逾百起医院枪击事件 FBI探利比亚枪手狂劫五千万美元演员有怪癖 只爱演死尸纽约手机可接收紧急警报捐肾牵良缘 悲剧变喜剧四条眼镜蛇盘绕 “守护”婴儿午睡印度高官建议用阉割强奸犯方法遏制强奸世行营商环境排名遭质疑公务报销作假引发公众愤慨 加拿大政府奥巴马考虑停止窃听盟国领导人泰国前总理阿披实被控谋杀英国报纸窃听丑闻开庭审理普京称苏联共青团不仅是政治还是友谊和美主持人就\"杀光中国人\"言论道歉美国承诺停止监听盟国美媒:光有“屌丝”与“土豪”社会无法两代人的房子高血压管理HELIX&二十世纪最伟大的女子高尔专家白酒要从社交化向年轻化转变王学兵演被小童星“嫌弃”广州市民肠道健康消费调查 答问卷有机穗女彩民中1157万先买房“安顿好父中国软交会:开启新经济腾飞引擎大乐透奖池稳居31亿睡眠是性的原动力柳州连夜暴雨城区公交瘫痪QS亚洲大学排名:清华第五、北大第九这间祠堂里有家幼儿园小米也推出了双系统 有没有侵酷派双系广发银行签订税收遵从合作协议“暴力鸟”中场一肩挑网传驱蚊偏方多数不靠谱端午莞住宅成交回落房价坚挺辩证施策 标本兼治4月二三线楼市“接力”上涨 何时买民办园招生不透明 家长犯迷糊
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘