2013-02-13 43 views
3

我有一个简单的SQL Server数据库,有12个表。每个表格有100到1000行。当我的网络应用程序加载时,这些表格直接保存到数组中。从那时起,使用数组而不是直接访问表。只要其他用户更改数据库中的数据,就需要更新数组。记录对SQL Server数据库的更改并将它们发送到客户端的最佳方法?

要做到这一点,我打算使用Ajax轮询PHP脚本每10秒。该脚本检查这12个表中的任何一个表上的更改,并仅将所做的更改返回给客户机,而不是整个表。

的问题是,我不知道如何来记录这些12个表进行任何更改,然后在某种程度上,他们可以在Javascript中被解释为更新阵列返回这些修改客户机。

什么是跟踪变化到SQL Server表中的最佳/最简单的方法是什么?


也许更明确的方式来问我的问题是比较广泛适用 - 什么方法有查询或随时间的变化发现到SQL Server表?

+0

高速缓冲存储器中读出。数据更改时缓存无效。 – datasage 2013-02-13 18:00:00

+0

有很多很多方法可以做到这一点,而且它们都不一定足够简单,我们不想为你写信。有没有理由不想查询表格? – 2013-02-13 18:09:11

+0

在这个世界里,这太局部化了吗?因为我提供了很多关于我的具体情况的信息?如何在本地数据和服务器端数据之间创造平衡,而不是每一天全球程序员处理的事情?我只是在寻找一些关于如何使用SQL Server来完成这些操作的建议 - 而不是整个写作工作。就像我得到的建议 - 通过缓存读取,保留最新的更新表或字段,并更改数据捕获 - 这正是我正在寻找和许多其他人可能需要的! – dallin 2013-02-14 17:11:24

回答

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/

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

+0

谢谢Kenneth!这完全是我在找的东西!在调查CDC之后,我发现SQL Server 2008有两个解决方案 - 更改数据捕获和更改跟踪。更改跟踪做同样的事情,但重量更轻,包含在SQL Server Express中,但在数据更改之前缺少数据的历史记录。这两种解决方案都是SQL Server 2008中的新增功能,并且在此之前需要定制解决方案。我感谢你的回答! – dallin 2013-02-14 20:17:25

1

我相信我误解你的问题乍看之下,但它似乎你存储在一个javascript数组中的数据。如果是这样,请在javascript中保留“上次更新”时间戳,并在数据库中保留“上次更新”列。正如其中一条评论所说,这里实际代码有点多,但有一个想法:

initial.php - 加载页面,所有数据保存在内存中的一个JavaScript变量,这个页面将轮询checkforupdates.php? LASTUPDATE = [最近更新的时间戳]

checkforupdates.php - 运行SQL查询语句的 “WHERE LASTUPDATE> providedTimestamp”,回声json_encode($数据)

这是否足以为你指明正确的方向?

+0

如果应用程序允许删除,则必须考虑删除操作。 – 2013-02-13 18:33:06

+0

谢谢,这是!这符合我的想法。如果我需要支持SQL Server 2005,我可能会采用这种方法。否则,Kenneth的答案将我引入了Change Tracking,这是SQL Server 2008中的一项集成功能,可以解决此问题。 – dallin 2013-02-14 20:11:29

相关问题