阅读更多

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...

  • 【java毕业设计】智慧社区教育服务门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

  • 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics