阅读更多

5顶
1踩

数据库
【编者按】随着互联网和移动互联网的发展,各个机构都需要支撑远超过以往的数据。而在这个需求的刺激下,IT领域出现了大量数据处理技术,其中之一就是NoSQL。灵活的数据类型,高效的处理能力,让NoSQL已占据数据管理系统的一席之地,比如人气NoSQL数据库MongoDB。然而在Wix工程实践中,他们发现,大量场景中其实并不需要NoSQL,反而成熟的RDBMS更具效益,比如MySQL。下面一起看Wix工程主管 Aviran Mordo的分享,由OneAPM工程师翻译。

以下为译文

开发人员选择NoSQL数据库一般都是根据主观臆断,或者“关系型数据库性能不如NoSQL数据库”这个错误的理念。此外,在做数据库选型时,开发人员往往还忽视了运维上的开销。实际上根据Wix的实践发现,大部分情况下都不必去选择NoSQL数据库,而且如果使用得当的话,MySQL也可以是一个优秀的NoSQL数据库。

在可扩展系统构建时,一个很重要的考量是使用的技术是否成熟,选择成熟的技术意味着出错时能够迅速恢复。当然,开发者也可以在项目中使用最新最牛的NoSQL数据库,而这个数据库在理论上也可以良好地运行,然而在生产环境中出现了问题恢复需要多久?技术上已有的知识和经验积累对于问题缓解至关重要,当然这个积累也包括了Google可以搜索到的内容。相比之下,关系型数据库已经存在了超过四十年,业界对于关系型数据库的维护也积累了大量的经验。基于这些考虑,在新项目做技术选型时通常会选择MySQL,而不是NoSQL数据库,除非NoSQL真的有非常非常明显的优势,比如数据量太大就不适合使用MySQL。

必须承认MySQL也有自己的问题。在大规模系统中使用的话可能会碰到性能上的问题。为实现MySQL性能的最优化,这里总结了几条经验,其中之一是避免数据库级别的事务。因为事务需要数据库采用锁来实现,从而会影响数据库性能。通常情况下会使用逻辑应用程序级的锁来 替换,从而减少负载并获得一个更好的性能。

举个例子,以发票结构为例。如果某个发票有多个行项目,取代在单事务将所有行项目写入,这里更应该在非事务情况下逐行写入。在所有行全部写入数据库后,这里还会写入一个首记录,它包含了指向所有行项目ID的指针。这样一来,如果所有行中有一行写入失败,那么这行的首记录就会不存在,从而整个事务失败。这么做虽然可能会造成一些垃圾记录,但在存储介质如此便宜的今天这显然不是什么大问题,而这些垃圾记录也可以做定期删除。

下面也中介了一些MySQL实践经验:
  • 不要使用joins查询,只做主键或者索引查询。
  • 不要使用自增主键因为会有锁,取而代之,使用客户端生成键,比如GUIDs。同时,如果你使用主主备份,自增键还可能会冲突,因此你需要为每个实例都定制键的范围。
  • 没有索引的字段通通删掉或者使用JSON集合成单一字段。

在Wix,MySQL经常会被当做键值存储,比如在一列中储存JSON对象,从而在不改变数据库模式下对数据结构模式进行扩展。在MySQL中,使用主键读取也很快,Wix就通过这个方式获得了亚毫秒级的读取速度,完全可以支撑整个使用场景。基于以上这些原因,MySQL完全可以看作一个符合ACID原则的NoSQL数据库。至于数据库的大小,一个MySQL实例支持几亿条数据是没什么问题的。

关系型数据库的一个鲜明的优势是不用考虑最终一致性,而这个在NoSQL数据库中并不是原生支持的。本文也不是贬低NoSQL,因为关系型数据库已有限制也非常多:严格的数据结构和大小限制。这里只是想提醒开发人员,在选择新技术时不要忽视运维成本。

原文链接:MySQL is a Great NoSQL Database (责编/仲浩)
5
1
评论 共 4 条 请登录后发表评论
4 楼 houyujiangjun 2015-10-08 09:16
但是大多数场景并不满足
3 楼 戢_时光 2015-10-07 20:23
好     文章!
2 楼 YuHuang.Neil 2015-10-07 09:36
nice!!
1 楼 sz_xiaoqi 2015-10-05 17:42

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java重构设计.doc

    1.重构要求 2.重构的工作 3.代码的bad smell 4. 重构的例子

  • Notepad++添加到右键菜单中的解决方法

    Notepad++添加到右键菜单中的解决方法

  • 【转】Bad Smell重构和设计的标准

    -------“与其无尽的等待完美的设计,不如立刻着手实现可行的设计,然后再在设计出现臭味的时候重构实现!” 引言 今天,一位初学编程的朋友对我说,他写的类要么是数据类,要么是操作类。似乎写得不...

  • Bad Smell重构和设计的标准

    Bad Smell重构和设计的标准 -------“与其无尽的等待完美的设计,不如立刻着手实现可行的设计,然后再在设计出现臭味的时候重构实现!” n 引言 今天,一位初学编程的朋友对我说,他写的类要么是数据类,要么是...

  • 重构:程序中的22个bad smell

    就可以取得原本位于参数列上的一份数据,那么你应该激活重构准则 Replace Parameter with Method 。上述的既有对象可能是函数所属 class 内的一个值域,也可能是另一个参数。你还可以运用 Preserve Whole Object ...

  • Bad Smell (代码的坏味道)

    Bad Smell (代码的坏味道) 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹。 正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 “代码异味”。 今天让我们一...

  • 【转】Bad Smell(代码的坏味道)

    然后你可能发现或许可以运用Form Template Method获得一个Template Method设计模式。如果有些方法以不同的算法做相同的事,你可以择定其中较清晰的一个,并使用Substitute Algorithm将其它方法的算法替换掉。 如果两...

  • 《重构:改善既有代码的设计》 —— 重构概念及代码坏味道

    本文主要来自《重构—改善既有代码的设计》的一些读书笔记和摘录,在对应的地方都标注上了书中的对应页数,可以结合原书服用。刚开始看这些所谓的重构方法可能是一头雾水,看完一遍书以后对应一些方法可能同样也是...

  • 代码的坏味道(bad smell)

    代码坏味道: 是指在代码之中潜在问题的警示信号。并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并...原则:当你感觉需要写注释时,请尝试重构,试着让所有注释都变得多余。

  • Bad Smell Code

    在进行Code Review或者重构时,需要对坏代码进行调整; 参考:http://blog.csdn.net/sulliy/article/details/6635596 ------------------------------------------------------------------------------------...

  • 重构 之代码的坏味道(Bad smell)

    最常见的Bad smell有: 1、重复代码。 我觉得这是优质代码的头号公敌,通常是大量复制、粘贴的结果。 这厮带来的最大问题:相同的逻辑分散在多处,导致修改困难,容易遗漏 2、过大的类或者方法 一个方法如果很长...

  • Bad smell in code (代码的坏味道)

    如果[向既有对象发出一条请求]就可以取得原本位于参数列上的一份数据,那么你应该激活重构准则Replace Parameter with Method。上述的既有对象可能是方法所属class内的一个字段,也可能是另一个参数。你还可以运用...

  • Bad Smell(代码的坏味道)

    然后你可能发现或许可以运用Form Template Method获得一个Template Method设计模式。如果有些方法以不同的算法做相同的事,你可以择定其中较清晰的一个,并使用Substitute Algorithm将其它方法的算法替换掉。 ...

  • Bad Smell & Refactoring

    Bad Smells & Refactoring 1 题记 Any fool can write code that a computer can understand. Good programmers write code that humans can understand.——Martin Fowler (任何一个傻瓜都能写出计算机可以...

  • java重构文档(改造bad smell)

     周五和下班前提交更要小心,更改后的代码一定要及时放cvs,并在提交时注明修改的地方或原因,告同组的项目组员。 2)重构要先有接口测试,重构后必须保证通过接口测试,因为现在的系统是一个正常运行的系统,如果...

  • 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)

    膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构 , 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出处 :  ...1. 重复代码 (Duplicated...

  • polylearn-0.1.dev0-cp35-cp35m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

  • 基于Simulink的语音信号降噪与增强.docx

    基于Simulink的语音信号降噪与增强.docx

Global site tag (gtag.js) - Google Analytics