【问题标题】:Best way to record changes to a SQL Server Database and send them to the client? [closed]记录对 SQL Server 数据库的更改并将其发送到客户端的最佳方式? [关闭]
【发布时间】:2013-02-13 17:57:03
【问题描述】:

我有一个包含 12 个表的简单 SQL Server 数据库。每个表有 100 到 1000 行。当我的 Web 应用程序加载时,这些表会直接保存到数组中。从那时起,使用数组而不是直接访问表。每当另一个用户更改数据库中的数据时,都需要更新数组。

为此,我计划使用 ajax 每 10 秒轮询一次 PHP 脚本。该脚本检查这 12 个表中的任何一个的更改,并仅将已进行的更改而不是整个表返回给客户端计算机。

问题是,我不知道如何记录对这 12 个表的任何更改,然后以可以在 Javascript 中解释以更新数组的方式将这些更改返回到客户端计算机。

在 SQL Server 中跟踪表更改的最佳/最简单方法是什么?


也许是一种更清晰的方式来提出更广泛适用的问题 - 有哪些方法可以查询或发现 SQL Server 表随时间发生的变化?

【问题讨论】:

  • 读取缓存。数据变化时使缓存失效。
  • 有很多很多方法可以做到这一点,但没有一种方法一定简单到让我们想为你写。您是否有理由不想只查询表?
  • 这在世界上怎么会过于本地化?因为我提供了太多关于我的具体案例的信息?想要在本地数据和服务器端数据之间创建奇偶校验而不是世界各地的程序员每天都在处理的事情?我只是在寻找一些关于使用 SQL Server 执行此操作的方法的建议——而不是为我做这件事的全部文章。类似于我得到的建议 - 通读缓存,保留最后更新的表或字段,并更改数据捕获 - 这正是我正在寻找的,许多其他人可能需要!
  • “过于本地化”?严重地?这甚至没有意义。 “没有建设性”是因为过于开放也许,或者如果它看起来过于面向 DB,但过于本地化,则离题是荒谬的。
  • 我同意你之前的评论 dallin。如果它是“本地化的”,那么为什么 Microsoft 会在 SQL Server 2008 中构建不是一个而是两个特定工具来处理您正在寻找的东西?

标签: php sql-server ajax sql-server-2008


【解决方案1】:

您还可以研究变更数据捕获。这听起来正是您所需要的。这是 BOL:http://msdn.microsoft.com/en-us/library/bb522489%28v=sql.105%29.aspx。 这是 Pinal Dave 的一篇文章:http://blog.sqlauthority.com/2009/08/15/sql-server-introduction-to-change-data-capture-cdc-in-sql-server-2008/

基本上,它记录所有更改(插入、更新和删除)并允许您从系统表中提取信息。不幸的是,除了为您指出正确的方向之外,我自己对此知之甚少。

【讨论】:

  • 谢谢肯尼斯!这正是我想要的!在调查了 CDC 之后,我实际上发现 SQL Server 2008 对此有两个解决方案 - 更改数据捕获和更改跟踪。更改跟踪功能相同,但重量更轻,包含在 SQL Server Express 中,但缺少更改前数据的历史记录。这两种解决方案都是 SQL Server 2008 中的新解决方案,在此之前需要自定义解决方案。感谢您的回答!
【解决方案2】:

我相信我乍一看误读了您的问题,但您似乎将数据存储在 javascript 数组中。如果是这样,请在 javascript 中保留“最后更新”时间戳,并在数据库中保留“最后更新”列。正如其中一位 cmet 所说,在这里实际编码有点多,但有一个想法:

initial.php - 加载页面,将所有数据保存在 javascript 变量中,该页面将轮询 checkforupdates.php?lastUpdate=[最近更新的时间戳]

checkforupdates.php - 使用“WHERE lastUpdate > providedTimestamp”运行 SQL 查询,回显 json_encode($data)

这足以为您指明正确的方向吗?

【讨论】:

  • 如果应用允许删除,您必须考虑删除因素。
  • 谢谢thatisis!这与我的想法一致。如果我需要支持 SQL Server 2005,我可能会采用这种方法。否则,Kenneth 的回答引导我使用更改跟踪,这是 SQL Server 2008 中解决此问题的集成功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
相关资源
最近更新 更多