【问题标题】:How to get real time update of data to main warehouse如何将数据实时更新到主仓库
【发布时间】:2014-02-28 00:41:45
【问题描述】:

所有, 需要一些信息。

我们在多个地点设有商店,并使用安装的客户端服务器应用程序进行销售活动。 销售数据存储在所有商店设置的数据库中... @ end of day - 一批从所有商店位置提取数据并更新主仓库数据库。

我们希望有实时实施,以便每当有交易@任何商店...数据将立即更新到主仓库存储库。

关于我们如何实现数据到主仓库的实时更新的任何线索?

提前谢谢...

【问题讨论】:

标签: c# sql-server real-time


【解决方案1】:

一种方法称为复制。在 SQL Server 中有几种方法可以做到这一点。您可能正在寻找事务复制或合并复制。

Here's a place to start 在 SQL Server 2012 文档中。 这里的a fairly recent overview 可能会有所帮助。

【讨论】:

  • 感谢您的 cmets。我有 1 个查询。比方说,如果某些事务正在进行,并且在那个时刻发生事务复制..如何自动处理这种情况,或者我们需要采取任何措施?
  • 我得到了上述问题的答案,谢谢。
【解决方案2】:

您应该确保您了解“实时”的含义,以及您真正需要的实时性。如果您没有预先聚合数据然后将其存储在 WH 中,那么您应该能够在数据库服务器之间设置replication(如果它们可以相互通信)。如果您正在加载聚合,那么它会变得很棘手,因为您必须将度量(事实)合并到仓库现有度量中,这很困难。如果您不需要真正的实时,只需要缓慢的涓涓细流,那么可以考虑在 sql 代理中按计划运行当前进程。

【讨论】:

    【解决方案3】:

    首先 - 为什么不每天多次运行批处理。它不会是真正的“实时”,但可能会产生足够好的真实世界结果。

    一种选择是实现由正在使用的 SQL 引擎提供的主-主复制。虽然这可能意味着需要采取一些措施来防止重复 ID、自动递增不匹配等。例如,我们设置了一个主-主系统,以便一个生成具有奇数 ID 的条目,另一个生成偶数 ID。

    另一种方法可能是所有读取都针对本地数据库执行,所有写入都执行到单个远程主机。数据将作为主从设置进行复制。这将提供最佳的数据一致性,但慢速网络会使任何写入变慢。我们在主-主复制之上实现了这种设置,因为大多数交互都是读取。

    我实际上遇到的一个类似商店/仓库设置的真实用例是基于 Firebird SQL。每个表都实现了触发器,以将本地数据库上的每个操作存储在所谓的日志表中。并且有一个复制应用程序一直在运行,定期检查这些日志表,将数据更新到远程数据库并从远程(拥有自己的日志表)中提取新数据。但不利的一面是,当数据库设置发生更改并且复制应用程序有时会失败/挂起时,需要更新触发器,因此维护起来很可怕。但是数据一致性得到了很好的维护,并通过用于本地数据库的负 ID 和用于主/远程的正 ID 来解决。但最终它并没有真正提供真正的“实时”。

    最后 - 没有万能的答案,并且可能会就此主题撰写书籍。 Research 和 Google 是您的朋友。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2018-05-06
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多