【问题标题】:What's the best alternative to using triggers in MYSQL for better scaling?在 MYSQL 中使用触发器以更好地扩展的最佳替代方法是什么?
【发布时间】:2019-07-30 04:09:31
【问题描述】:

我们有多个爬虫同时访问我们的 MYSQL 数据库,不断更新大量行。 每个表都有触发器来评估爬虫发送的 UPDATE,随着我们进入项目,我们有越来越多的条件来验证触发器内的每个更新,因此我们担心这不是扩展的好方法. 主表有触发器,可以将数据发送到另一个也有触发器的表,然后再发送到另一个有触发器的表。

我们正在考虑几个选项来避免开销、表锁定或此类问题。

到目前为止,我们认为我们需要放弃 MYSQL 或将另一个数据库引擎作为队列放在中间,并使用 Python 或 Node 处理信息,而不是评估那里的数据并仅在必要时直接插入/更新。

另外,由于我们主要是写,我们在扩展和避免拥有一个巨大的单体时遇到了问题,但到目前为止我们还没有一个好的计划。

我在谷歌上搜索了很多关于一个好的架构的想法,大多数建议似乎都远离了 RDBMS。

TLDR:核心问题是,什么是避免由多个表中的触发器引起的开销的最佳方法是在多个条件下评估多个条件?是否使用其他方法更好地处理数据?

【问题讨论】:

  • 我会查看 Redis,并将逻辑拉出到中间件而不是触发器中,后者隐藏了逻辑。但是要完全回答您的问题,除了预感抱歉,我无法给出可靠的答案
  • 我会在dba问这种事情
  • 确定触发器有问题吗?而不是您写入的数据量,并且仍然必须使用替代系统写入。
  • 需要更多细节。什么样的更新? “喜欢”?车辆的纬度/经度位置?线上/线下?什么?更新是否分批进行?还是一次一个?拦截他们容易吗?是否涉及复制?等等等等。您的问题没有“一刀切”。
  • 抱歉没有更新。 @RickJames 用于价格跟踪和基于它们的计算。我们可以一次做一个,也可以分批做一个,目前是一次一个。目前我们没有复制。

标签: mysql database-design triggers database-administration database-trigger


【解决方案1】:

如果您要在特定实体中创建或更新记录,请在您的框架上使用侦听器。监听特定实体,在对应的表上插入一条新记录。这样可以避免触发器出错

【讨论】:

    【解决方案2】:

    我建议您的抓取工具处理数据以决定如何处理这些数据。他们要么可以执行必要的SELECTsUPDATEs,要么可以将这些数字传递给其他可以批量处理INSERT(或其他)的进程。

    通过这样的方式,您可以让多个服务器上的多个进程进行数据抓取(直到您被 DOS 攻击阻止)并咀嚼数据。然后他们就可以从容地更新数据库上的数据了。

    建议采用这种方法的原因是您的进程可以任意扩展,但不能写入数据库。

    【讨论】:

      猜你喜欢
      • 2017-07-13
      • 2016-09-22
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多