MySQL是很棒的NoSQL

NoSQL是一组数据库技术,旨在处理与关系数据库无关的大量数据或特定数据结构。 但是,选择使用NoSQL数据库通常是基于炒作,或者是错误的假设,即关系数据库不能像NoSQL数据库那样好执行。 在选择数据库时,工程师通常会忽略运营成本。 在Wix Engineering上 ,我们发现在大多数情况下我们不需要NoSQL数据库,并且如果使用得当,MySQL是一个很棒的NoSQL数据库。

在构建可伸缩系统时,我们发现重要的因素是使用成熟的技术,这样我们就知道如果出现故障如何快速恢复。 例如,您可以使用理论上运行良好的最新,最好的NoSQL数据库,但是如果遇到生产问题,恢复正常活动需要多长时间? 该系统及其工作原理的预先存在的知识和经验,以及能够向Google寻求答案,对于Swift缓解风险至关重要。 关系数据库已经存在了40多年,并且在如何使用和维护它们方面拥有广泛的行业知识。 这是我们通常默认使用MySQL数据库而不是NoSQL数据库的原因之一,除非NoSQL是解决该问题的更好方法,例如,如果我们需要文档存储或处理MySQL无法处理的大数据量。

但是,在大规模系统中使用MySQL可能会带来性能挑战。 为了从MySQL获得出色的性能,我们采用了一些使用模式。 其中之一是避免数据库级事务。 事务处理要求数据库维护锁,这会对性能产生不利影响。

相反,我们使用逻辑应用程序级别的事务,从而减少了负载并从数据库中提取了高性能。 例如,让我们考虑一个发票模式。 如果有一个包含多个订单项的发票,则无需将所有订单项写在单个交易中,而是简单地逐行写任何交易。 将所有行都写入数据库后,我们将创建一个标题记录,其中包含指向订单项ID的指针。 这样,如果在将各行写入数据库时​​发生故障,并且没有写入标头记录,则整个事务将失败。 可能的缺点是数据库中可能有孤立行。 但是,我们认为这不是一个重大问题,因为存储价格便宜,并且如果需要更多空间,可以稍后清除这些行。

以下是一些其他使用模式,它们可从MySQL获得出色的性能:
没有关于联接的查询; 仅按主键或索引查询。 不要使用顺序主键(自动递增),因为它们会引入锁定。 而是使用客户端生成的密钥,例如GUID。 另外,当您进行主-主复制时,自动增量会导致冲突,因此您将必须为每个实例创建键范围。 任何未建立索引的字段均无权存在。 相反,我们将此类字段折叠为单个文本字段(JSON是一个不错的选择)。

我们经常简单地将MySQL用作键值存储。 我们将JSON对象存储在其中一列中,这使我们能够扩展架构而无需进行数据库架构更改。 通过主键访问MySQL的速度非常快,并且通过主键可以得到亚毫秒级的读取时间,这在大多数情况下都是非常好的。 因此,我们发现MySQL是符合ACID的出色NoSQL。

在数据库大小方面,我们发现单个MySQL实例可以很好地处理数亿条记录。 我们的大多数用例在单个实例中的记录都不超过几亿条。

与NoSQL相比,使用关系数据库的一大优势是您不需要处理大多数NoSQL数据库显示的最终一致的特性。 我们的开发人员都非常了解关系数据库,这使他们的生活变得轻松。

不要误会我的意思,NoSQL有一个地方。 关系数据库有其局限性—单一主机大小和严格的数据结构。 工程师通常会忽略运营成本,而选择新颖的东西。 如果这两种选择都可行,我们认为我们需要真正考虑将其维持在生产中需要采取的措施,并做出相应的决定。

翻译自: https://www.javacodegeeks.com/2015/08/mysql-is-a-great-nosql.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值