database - 登台表/登台数据库是一种反模式吗?

标签 database design-patterns anti-patterns staging

当 rpc(例如 Java RMI 或某种 Web 服务调用)或消息队列(例如 JMS)是更好的解决方案时,暂存表是否是一种反模式,或者是否有问题可以通过暂存更好地解决表?

澄清一下:

我所说的暂存表是指记录被一个进程附加到一个或多个表的情况,然后由第二个或多个进程读取并对其进行操作。我不是指那些旨在反射(reflect)间隔状态结束(一天结束、支付期结束等)的表格。在大多数情况下,登台表的架构非常模仿应用程序数据类型,例如客户或帐户。

此反模式的潜在原因:

1) 两个进程所有者之间的业务单元墙防止写入或读取暂存的进程被修改。

2) 对写入暂存或从暂存读取的进程信心不足导致开发人员使用表来防止数据丢失“以防出现故障”

3) 缺乏知识或 DGAS(不要给出 ^%$@)的态度

最佳答案

正如您所描述的,暂存表是大多数数据仓库或 BI 环境的重要组成部分。您可能会争辩说可靠/弹性 rpc 会完成同样的工作,但我认为您是错误的。

通过将数据拉到暂存表,您将其移出生产环境,可能会进行进一步的计算、汇总、重新索引、重新键入等等,其中大部分是在数据库中实现的'.用 RPC 替换它,您将代码和 CPU 周期从数据库中移出并移入应用程序服务器中,而没有任何实际好处。例如,应用服务器崩溃的可能性要高得多——您不能(轻松地)回滚 RPC。

当然,有很多方法可以在系统之间可靠地移动数据,暂存表恰好是最简单、性能最好、可靠且在开发方面成本最低的方法之一,并不总是意味着它们是正确的方法 - 但通常情况下。

关于database - 登台表/登台数据库是一种反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/633006/

相关文章:

java - 一个合适的模式而不是返回空值

design-patterns - 为什么 'smoke and mirrors' 是一种反模式?

sql - 如何更正此 sql 分组查询? (我觉得这个是sql generic,我们用的是postgresql)

database - Pandas ,具有不同列数的大文件,在内存中追加

java - 复合模式/实体系统与传统 OOP

php - 依赖注入(inject)简单实现

ruby-on-rails - 如何在现有 "unique"旁边的 Rails 3 和 PostgreSQL 中指定 "unique key"值?

php - mysql 索引到日期时间类型的列

c++ - 同一函数的 const 和非 const 版本 - 反模式?

anti-patterns - 这个反模式(一个带模式的函数)有名字吗?