如何使用数据库

时间:2015-04-29 17:57:46

标签: asp.net sql-server oracle caching memcached

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

在某些业务流程中,我们进行了大量的验证,需要大量来自数据库的数据,我们无法保留这些数据的静态副本,因为我们不知道数据是否已被修改,因此我们每次都会获取数据这会减慢过程。

一种可能的解决方案可能是

  1. 在数据库上写入触发器,以便在更改记录时创建/更新prefixed-postfixed(table-PK1-PK2-PK3-column)文件
  2. 使用FileSystemWatcher监控此文件更改并使密钥(表-PK1-PK2-PK3-column)到期以获取更新数据
  3. 问题:大约有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的触发器看起来有点困难
    3. 仍然听起来很可悲,不是吗?

      请提出任何明智的建议

2 个答案:

答案 0 :(得分:3)

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

How to: Use SQL Server Change Tracking

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

Change Data Capture

我没有使用Oracle的经验,但我相信它也可能有一些跟踪功能。本文可能会帮助您入门:

20 Using Oracle Streams to Record Table Changes

答案 1 :(得分:3)

我不清楚(对我来说)是否强制使用Memcached。我个人会避免使用它,而是使用SqlDependencyOracleDependency。这两个都允许传递db命令,并在命令返回的数据发生更改时得到通知。

如果Memcached是强制性的,你仍然可以使用这两个类来触发失效。