将大量数据缓存到磁盘
本文关键字:磁盘 缓存 数据 | 更新日期: 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