2011-04-21 73 views
0

我有一个需要在磁盘上缓存大量数据的需求。 每当数据库发生变化时,都会从数据库中检索数据并缓存在磁盘上。我将有一个后台进程,不断检查我的缓存数据与数据库,并在需要时更新它。将大量数据缓存到磁盘中

我想知道在我的磁盘上组织缓存数据的最佳方式是什么,以便从缓存写入和读取速度更快。 另一个线程将用于从数据库中提取一些新数据并将其缓存在磁盘上。我还需要注意两个线程之间的同步(一个将更新现有的缓存数据,另一个将新写入的数据写入缓存)。 请建议一个组织缓存中数据的策略,并且也是线程之间的同步。

+4

这太疯狂了。缓存在光盘上?你的意思是在磁盘上存档吗?数据库已经具有内置缓存 - 并且比任何有人提供的手工存储更高效和智能。 – Aliostad 2011-04-21 10:32:31

+1

是的,我会缓存在硬盘上。这是为了避免来自数据库服务器的多个数据库调用和数据传输。 – KhanS 2011-04-21 10:47:51

+1

这不是缓存。这就是“归档”。缓存意味着通过存储**更多的易失性存储**来加快速度。这不是你在做什么。 – Aliostad 2011-04-21 10:51:23

回答

1

SQL Server有一些叫做XML表的东西。这些表基于位于磁盘中的物理XML文件。您可以将磁盘中的XML数据映射/链接到SQL Server中的表中。对于用户来说,它是无缝的,换句话说,他们将这些表格视为常规表格。

除了对于磁盘缓存上的海量数据技术/哲学讨论,这只是一个想法...

1

你关心的数据相合?关于电源故障?

内存映射文件连同occational冲porbably希望得到你想要

你需要有数据的索引访问?

您可能需要设计一些B树实现或B +树实现。这使索引数据的有效恢复和更好的块级锁定成为可能。

http://code.google.com/p/high-concurrency-btree/

0

作为替代答案,我自己B+Tree implementation将整齐地解决这个问题作为一个完全托管代码(C#)实现一个IDictionary < TKEY的,TValue >的。它是一个单文件键/值存储,它是线程安全的并且针对并发进行了优化。它是专门为此目的而创建的,用于提供直写式高速缓存。