如果使用得当,MySQL 也可以化身 NoSQL(如果使用得当英语)

网友投稿 627 2022-09-12

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

如果使用得当,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,因为关系型数据库已有限制也非常多:严格的数据结构和大小限制。这里只是想提醒开发人员,在选择新技术时不要忽视运维成本。

上一篇:Cloud Insight 自定义仪表盘上线,满足日常运维需要(cloudflare)
下一篇:想要上市,SaaS 企业应该重点关注什么?(上)(想要上市,为什么要重视全面预算管理)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~