【发布时间】:2011-02-14 09:38:31
【问题描述】:
我的团队正在考虑开发一个从数据库读取数据的实时应用程序(一堆图表、仪表等)。在后端,我们有一个大容量的 Teradata 数据库。我们预计其他一些应用程序会不断地将数据输入到这个数据库中。 现在我们想知道如何将数据库中的更改输入到应用程序中。在我们的案例中,从应用程序轮询不是一个可行的选择。
Teradata 中是否有任何工具可以帮助我们实现这一目标?
任何关于这方面的指示将不胜感激
【问题讨论】:
我的团队正在考虑开发一个从数据库读取数据的实时应用程序(一堆图表、仪表等)。在后端,我们有一个大容量的 Teradata 数据库。我们预计其他一些应用程序会不断地将数据输入到这个数据库中。 现在我们想知道如何将数据库中的更改输入到应用程序中。在我们的案例中,从应用程序轮询不是一个可行的选择。
Teradata 中是否有任何工具可以帮助我们实现这一目标?
任何关于这方面的指示将不胜感激
【问题讨论】:
我们面临类似的要求。但在我们的案例中,客户要求我们提供对采购订单表的每日更改。这意味着我们必须每天运行一批脚本来捕获表中发生的变化。
所以我们开始每天收集数据,并将数据以稀疏历史格式存储在另一个表中。所以这里的过程很简单。我们在历史表中收集与第一天日期相反的采购订单详细信息记录。然后第二天,我们将第二天的提要记录与历史记录进行比较,并确定该记录中的任何变化。如果采购订单记录列发生变化,我们会收集该记录并将其保存在最终报告表中,该报告表将显示给客户。
如果您每天运行一次批处理脚本,并且一天内对记录的更改不止一次,那么此方法无法为您提供全部更改。为此,您可能需要根据您的要求每天多次运行批处理脚本。
如果您找到任何其他解决方案,请告诉我们。希望这会有所帮助。
【讨论】:
wiseforce 有一个变更数据捕获工具。 http://www.wisdomforce.com/resources/docs/databasesync/DatabaseSyncBestPracticesforTeradata.pdf
在这种情况下它可能会起作用
【讨论】:
可以选择带有存储过程的触发器吗?
CREATE TRIGGER dbname.triggername
AFTER INSERT ON db_name.tbl_name
REFERENCING stored_procedure
从理论上讲,您可以编写外部存储过程,这些过程可以调用用 Java 或 C/C++ 等编写的 UDF,可以近乎实时地将行数据推送到您的应用程序。
【讨论】: