记录 SQL Server 数据库的更改并将其发送给客户端的最佳方法是什么?

4
我有一个简单的SQL Server数据库,包含12张表。每个表都有100到1000行数据。当我的web应用程序加载时,这些表直接保存在数组中。从那时起,这些数组被用来替代对表的直接访问。只要另一个用户更改了数据库中的数据,就需要更新这些数组。为此,我计划每10秒使用ajax轮询PHP脚本。此脚本检查这12张表中的任何更改,并仅将已进行的更改返回给客户端机器,而不是整个表格。
问题是,我不知道如何记录对这些12张表的任何更改,并以一种可以用JavaScript解释以更新数组的方式将这些更改返回客户端机器。
最佳/最简单的方法是什么,以跟踪SQL Server表中的更改?
可能更广泛适用的更清晰地提出我的问题的方法是什么——有哪些方法可以查询或发现SQL Server表随着时间的推移所做的更改?

读取缓存。当数据发生变化时使缓存失效。 - datasage
有很多种方法可以做到这一点,但是没有一种是对我们来说足够简单以至于我们想为您编写。你不想直接查询表格吗? - Colin M
这怎么可能是太局限了?因为我提供了太多关于我的具体情况的信息吗?想要在本地数据和服务器端数据之间创建平衡不是每天都由全世界的程序员处理的事情吗?我只是想寻求一些使用SQL Server实现此目的的方法建议 - 而不是整个编写过程。像我得到的建议一样 - 通过缓存读取,保留最后更新的表或字段以及更改数据捕获 - 这正是我正在寻找的,也是许多其他人可能需要的! - dallin
2
“太局限”?说真的吗?这甚至没有意义。“不具建设性”或许可以用于过于开放的讨论,如果它看起来过于DB导向则会被认为是离题,但是“太局限”就荒谬了。 - C. A. McCann
1
我同意你之前的评论,Dallin。如果它是“本地化”的,那么为什么微软会在SQL Server 2008中构建不止一个而是两个特定工具来处理你所寻找的东西呢? - Kenneth Fisher
显示剩余3条评论
2个回答

2
您可能还需要了解变更数据捕获技术,它听起来正是您所需要的。以下是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/

基本上,该技术可以记录所有更改(包括插入、更新和删除)并允许您从系统表中获取信息。不幸的是,我自己对此了解不够深入,只能为您指明正确的方向。


谢谢Kenneth!这正是我在寻找的!在调查CDC之后,我发现SQL Server 2008有两个解决方案 - Change Data Capture和Change Tracking。Change Tracking做同样的事情,但更轻量级,包含在SQL Server Express中,但缺少数据变更前的历史记录。这两个解决方案都是SQL Server 2008中的新功能,在此之前需要自定义解决方案。感谢您的回答! - dallin

1
我最初看错了你的问题,但似乎你正在使用JavaScript数组存储数据。如果是这样,请在JavaScript中保留“上次更新”的时间戳,并在数据库中维护“上次更新”列。正如其中一条评论所说,要在此处实际编码有点过于繁琐,但有一个想法:
initial.php - 使用JavaScript变量将所有数据保存在内存中加载页面,此页面将轮询checkforupdates.php?lastUpdate = [最近更新的时间戳]
checkforupdates.php - 运行带有“WHERE lastUpdate> providedTimestamp”的SQL查询,回显json_encode($ data)
这是否足以指引你朝着正确的方向前进?

如果应用程序允许删除操作,你必须考虑到删除因素。 - Colin M
谢谢thatthatisis!这正是我想的方向。如果我需要支持SQL Server 2005,我可能会采用这种方法。否则,Kenneth的答案让我了解到Change Tracking,这是SQL Server 2008中一个集成特性,可以解决这个问题。 - dallin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接