AFAIK,Memcached不支持与数据库同步(至少SQL Server和Oracle)。我们计划在我们的OLTP数据库中使用Memcached(它是免费的)。
在某些业务流程中,我们进行了大量的验证,需要大量来自数据库的数据,我们无法保留这些数据的静态副本,因为我们不知道数据是否已被修改,因此我们每次都会获取数据这会减慢过程。
一种可能的解决方案可能是
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万个文件。现在它看起来很可悲:(
其他可能性
仍然听起来很可悲,不是吗?
请提出任何明智的建议
答案 0 :(得分:3)
MS SQL Server具有"更改跟踪"可能对您有用的功能。您启用数据库以进行更改跟踪并配置要跟踪的表。然后,SQL Server会在每次更新时创建更改记录,在表上插入,删除,然后让您查询自上次检查以来所做记录的更改。这对于同步更改非常有用,并且比使用触发器更有效。它比管理自己的跟踪表更容易管理。这是自SQL Server 2005以来的一项功能。
How to: Use SQL Server Change Tracking
更改跟踪仅捕获表的主键,并让您查询哪些字段可能已被修改。然后,您可以查询这些表上的表连接以获取当前数据。如果您希望它捕获数据,您也可以使用Change Capture,但它需要更多的开销,至少需要SQL Server 2008企业版。
我没有使用Oracle的经验,但我相信它也可能有一些跟踪功能。本文可能会帮助您入门:
答案 1 :(得分:3)
我不清楚(对我来说)是否强制使用Memcached。我个人会避免使用它,而是使用SqlDependency和OracleDependency。这两个都允许传递db命令,并在命令返回的数据发生更改时得到通知。
如果Memcached是强制性的,你仍然可以使用这两个类来触发失效。