如何用数据库实现同步Memcached

bja*_*jan 5 sql-server asp.net oracle memcached caching

AFAIK,Memcached不支持与数据库同步(至少SQL Server和Oracle).我们计划在我们的OLTP数据库中使用Memcached(它是免费的).

在一些业务流程中,我们做了一些繁重的验证,需要来自数据库的大量数据,我们不能保留这些数据的静态副本,因为我们不知道数据是否已被修改,因此我们每次都会获取数据,这会减慢进程的速度.

一种可能的解决方案是

  1. 在数据库上写入触发器,以便在记录更改时创建/更新prefixed-postfixed(table-PK1-PK2-PK3-column)文件
  2. 使用FileSystemWatcher和监视此文件更改并使密钥到期(表-PK1-PK2-PK3-column)以获取更新的数据

问题:大约有100,000名用户在10小时内使用任何数据组合.所以我们最终会有很多文件,例如categ1-subcateg5-subcateg-78-data100,categ1-subcateg5-subcateg-78-data250,categ2-subcateg5-subcateg-78-data100,categ1-subcateg5-subcateg-33-data100等

我期待至少500万个文件.现在它看起来很可怜​​的解决方案:(

其他可能性

  1. 从触发器异步调用Web服务传递密钥到期
  2. 从触发器调用exe而不等待它完成,然后这个exe将使密钥到期.(我在SQL Server上使用xp_cmdsell来调用exe这个方法取得了一些成功,从oracle的触发器调用exe看起来有点困难)

仍然听起来很可悲,不是吗?

请任何聪明的建议

Bri*_*ler 3

MS SQL Server 具有“更改跟踪”功能,也许对您有用。您启用数据库进行更改跟踪并配置您希望跟踪的表。然后,SQL Server 在表上的每次更新、插入、删除时创建更改记录,然后让您查询自上次检查以来对记录所做的更改。这对于同步更改非常有用,并且比使用触发器更有效。它也比制作自己的跟踪表更容易管理。这是自 SQL Server 2005 以来的一项功能。

如何:使用 SQL Server 更改跟踪

更改跟踪仅捕获表的主键,并让您查询哪些字段可能已被修改。然后,您可以查询这些键上的表连接以获取当前数据。如果您希望它捕获数据,也可以使用更改捕获,但它需要更多开销,并且至少需要 SQL Server 2008 企业版。

变更数据捕获

我没有使用 Oracle 的经验,但我相信它也可能有一些跟踪功能。这篇文章可能会帮助您开始:

20 使用 Oracle Streams 记录表更改