如果使用得当,MySQL也可以化身NoSQL

随着互联网和移动互联网的发展,各个机构都需要支撑远超过以往的数据。而在这个需求的刺激下,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,因为关系型数据库已有限制也非常多:严格的数据结构和大小限制。这里只是想提醒开发人员,在选择新技术时不要忽视运维成本。

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2015-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

罗海雄:仅仅使用AWR做报告? 性能优化还未入门(含PPT)

编辑手记:祝贺罗海雄老师加入Oracle ACE社区,他是数据库SQL开发和性能优化专家,也是ITPUB论坛的资深版主,我们整理了罗老师一篇AWR裸数据分析的文...

1112
来自专栏杨建荣的学习笔记

一个复杂的数据需求的创新优化(r12笔记第96天))

今天处理了一个蛮有意思的案例,正如我给开发同学所说的那样,方案有很多,但是我们需要明确需求之后,找到一个最合适的需求。 业务同学反馈,数据库中有...

3396
来自专栏CSDN技术头条

漫谈千亿级数据优化实践:一次数据优化实录

即使没有数据倾斜,千亿级的数据查询对于系统也是一种巨大负担,对于数据开发来说,如何来优化它,既是挑战,也是机遇!

46710
来自专栏技术博客

Entity Framework简介

很久很久之前就想来好好的学习一下EF,一直也是各种理由导致一直也没有好好的开始,现在下定决心了,不管怎样一定要把这先走一遍,并且把自己学到的相关EF的知识进行记...

1261
来自专栏令仔很忙

Solr--全文索引原理

在一些大型的门户网站和电商网站中,都有自己的站内搜索,但是使用传统的数据库查询方式已经无法满足一些高级的搜索要求,比如说:搜索速度要快、搜索结果要按照相关度排...

5581
来自专栏后端技术探索

世界级的开源项目:TiDB 如何重新定义下一代关系型数据库

众所周知,在 SQL 方面处于顶级的有两个公司,一个是 Oracle,他们已经积累了大量的经验,另一个是谷歌,谷歌 F1 在2012年发布了一篇论文,个人认为它...

1143
来自专栏Android先生

写给小白的android基础面试笔试题(三)

好了,简历写完之后,你得多看两遍,最好不要出现语句错误或者错别字等等,如果还不放心的话你还可以发给你的同学看看,让他们帮你找找还有没有错误,然后你就可以去投简历...

1315
来自专栏一名叫大蕉的程序员

一场关于逻辑应该写在哪里的争论No.93

先说结论,我支持将逻辑写在 Java 等应用系统中。 观察了一下,传统企业以及绝大部分转型中的企业的 Java 应用中,很神奇的是,他们的开发人员包括我自己以...

5388
来自专栏成猿之路

关键的十个MySQL性能优化技巧

本文转载java知音

1032
来自专栏资深Tester

谁说软件测试简单了?

2286

扫码关注云+社区

领取腾讯云代金券