是'黑洞'表恶吗?

Str*_*rae 18 mysql database postgresql database-design

阅读这个问题我刚刚学会了blackhole表技巧的存在:基本上是使用单个表来插入数据,然后是在许多其他表中分割数据的触发器.

一旦开发项目的开发人员意识到这一点,我想知道这是否会导致问题.

这个tecnique的优点和缺点是什么?

编辑:当我看到这个例子时,我想到的眨眼是关于交易:如果由于某种原因交易失败,你会找到blackhole包含原始数据的行,用于历史目的,也许可以帮助调试 - 但这似乎成为我能看到的唯一+1黑洞.想法?

Nev*_*uyt 18

我认为黑洞没有任何真正的优点.

编写触发器代码来移动数据可能并不比编写代码以便首先在正确的位置插入数据的工作少得多.

正如Christian Oudard所写的那样,它并没有降低复杂性 - 只是把它移到一个很难调试的地方.

不利方面:

"副作用"在软件开发中通常是一个坏主意.触发器是副作用 - 我打算做一件事(在表中插入数据),它实际上做了很多其他事情.现在,当我调试我的代码时,我必须将所有副作用保留在我的头脑中 - 并且副作用本身可能有副作用.

大多数软件在维护方面花费的时间远远多于开发时间.将新开发人员带入团队并解释黑洞技巧可能会增加学习曲线 - 可以忽略不计的好处(在我看来).

因为触发器是副作用,如果你不小心,引发大量触发器相对容易,我总是试图设计我的数据库而不依赖于触发器; 触发器显然是正确的方法,我只让我最有经验的开发人员创建它们.黑洞技巧使触发器成为正常,规则的工作方式.当然,这是个人观点.


pil*_*row 15

提示你的原始问题并不是MySQL的"黑洞"的核心问题.

什么是BLACKHOLE?

在MySQL中,BLACKHOLE是一个存储引擎,只是丢弃所有插入其中的数据,类似于空设备.使用这个后端有很多原因,但它们往往有点深奥:

  • "仅限中继"的binlog过滤从站
    请参阅文档,此处此处.
  • 基准测试,
    例如,测量二进制日志记录的开销,而不必担心存储引擎开销
  • 各种计算技巧
    这里.

如果您不知道为什么需要伪装成表的数据接收器,请不要使用它.

你问的技术是什么?

正在考虑用途似乎是:

  1. 将INSERTed数据重定向到其他表
  2. 审核记录原始的INSERTion操作
  3. 丢弃原始的INSERT数据

因此,"邪恶"或优点/缺点问题的答案与可插入/可更新VIEW(实现#1的常用方法)的问题的答案相同,基于触发器的审计日志记录(大多数人如何做#2) )和行为覆盖/反作用一般(有很多方法可以完成#3).

所以答案是什么?

答案当然是"有时候这些技术是合适的,有时候也不合适." :)你知道你为什么这么做吗?应用程序是否更适合此功能?抽象是否太脆,太漏,太僵硬等等?