全部, 需要一些信息。
我们在多个地点设有商店,并使用安装的客户服务器应用程序进行销售活动。 销售数据存储在所有商店中设置的数据库中...... @结束日期 - 批处理从所有商店位置提取数据并更新主仓库数据库。
我们希望实时实施,以便每当有任何商店的交易......数据将立即更新到主仓库。
任何线索,我们如何才能实时向主仓库更新数据?
提前致谢...
答案 0 :(得分:0)
一种方法称为复制。有几种方法可以在SQL Server中执行此操作。您可能正在寻找事务复制或合并复制。
SQL Server 2012文档中的Here's a place to start。 这里的a fairly recent overview可能会有所帮助。
答案 1 :(得分:0)
你应该确保你了解“实时”的含义,以及你真正需要的实时时间。如果您不预先聚合数据然后将其存储在WH中,那么您应该能够在数据库服务器之间设置replication
(如果它们可以相互通信)。如果您正在加载聚合,那么它会变得棘手,因为您必须将度量(事实)合并到仓库现有度量中,这很难。如果你不需要真正的实时,只是一个缓慢的涓涓细流,那么考虑在sql代理中按计划运行你当前的进程。
答案 2 :(得分:0)
首先关闭 - 为什么不一天多次运行批次。它不会真正“实时”,但可能会产生足够好的现实世界结果。
一种选择是实现由正在使用的SQL引擎提供的主 - 主复制。虽然这可能意味着需要采取一些措施来防止重复ID,自动增量不匹配等。例如,我们设置了主 - 主系统,以便生成具有奇数ID的条目,另一个生成偶数。
另一种方法可能是针对本地数据库执行所有读取,并且所有写入都执行到单个远程主数据库中。数据将作为主从设置进行复制。这将提供最佳的数据一致性,但网络速度慢会使任何写入速度变慢。我们在主 - 主复制的顶层实现了这种设置,因为大多数交互都是读取。
我实际遇到的一个类似商店/仓库设置的实际用例是基于Firebird SQL。每个表都有触发器,用于将所有操作存储在所谓的日志表中的本地数据库中。并且有一个复制应用程序一直在运行,定期检查这些日志表,将数据更新到远程数据库并从远程数据库(具有自己的日志表)中提取新数据。但是作为一个缺点,当数据库设置中的某些内容发生变化并且复制应用程序有时会失败/挂起时需要更新触发器时,维护是一种恐怖。但数据一致性保持良好,并通过用于本地数据库的负ID和用于主/远程的肯定来解决。但最终它并没有真正提供真正的“实时”。
最后 - 没有一个适合所有人的答案,书籍可能会写在这个主题上。研究和谷歌是你的朋友。