将大量数据缓存到磁盘

本文关键字:磁盘 缓存 数据 | 更新日期: 2023-09-27 17:52:13

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

我想知道组织磁盘上缓存数据的最好方法是什么,以便从缓存中写入和读取可以更快。另一个线程将用于从数据库中获取一些新数据并将其缓存到磁盘上。我还需要处理两个线程之间的同步。(一个将更新现有的缓存数据,另一个将把新获取的数据写入缓存。)请建议一个策略来组织缓存中的数据以及线程之间的同步。

将大量数据缓存到磁盘

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

除了关于在磁盘上缓存大数据的技术/哲学讨论之外,这只是一个想法…

您关心数据的一致性吗?电力故障?

内存映射文件以及职业刷新可能会得到你想要的

你需要索引访问数据吗?

你可能需要设计一些B树实现或B+树实现。这提供了有效的检索索引数据和更好的块级锁定。

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

作为另一种答案,我自己的B+Tree实现将巧妙地解决这个问题,作为一个完全托管的代码(c#)实现字典<TKey,>。它是一个单文件键/值存储,线程安全并针对并发性进行了优化。它是专门为此目的和提供透写缓存而从头开始构建的。

  • 讨论- http://csharptest.net/projects/bplustree/
  • 在线帮助- http://help.csharptest.net/
  • 源代码- http://code.google.com/p/csharptest-net/
  • 下载- http://code.google.com/p/csharptest-net/downloads
  • NuGet Package - http://nuget.org/List/Packages/CSharpTest.Net.BPlusTree