1

我需要跟踪一组文件的大量 inotify 消息,这些文件在其生命周期内将在几个特定目录之间移动,并且 inode 完好无损;我需要跟踪这些 inode 的移动,以及创建/删除和更改文件内容。每秒将有数百次更改。

由于资源有限,我无法将其全部存储在 RAM(或磁盘或数据库)中。

幸运的是,这些文件中的大部分都会在短时间内被删除;只需存储文件内容和移动历史以供以后分析。未立即删除的文件最终将在特定目录中保留一段已知时间。

所以在我看来,我需要一个部分存储在 RAM 中并部分保存到磁盘的数据结构;保存到磁盘的部分需要重新调用(未删除的文件),但大部分不需要。我不需要查询数据,只需通过标识符(文件名,即 [A-Z0-9]{8})访问它。能够配置文件数据何时刷新到磁盘会很有帮助。

这样的野兽存在吗?

编辑:我问了一个相关的问题

4

1 回答 1

0

为什么不是数据库?说 SQLite。

虽然 SQLite 在空间方面并不是最有效的存储机制,但它有许多优点——首先是SQL RDBMS。SQLite 使用的内存量(用于临时缓存数据)可以通过cache_size pragma进行配置。

如果 SQLite 不是一个选项,那么“键值存储”之一呢?它们的范围从内存中的分布式客户端/服务器(例如 memcached)到基于本地嵌入式磁盘的(例如 BDB)再到具有持续支持溢出的内存以及介于两者之间的任何位置等。它们没有SQL DDL/DQL(虽然有些可能允许关系),但在他们所做的事情上很有效——存储键和值。

当然,人们总是可以实现一个 LRU 结构(比如一个带有限制的基本排序列表),溢出到一个简单的可扩展的基于磁盘的哈希实现......但是......首先考虑上面 :) [也可能有一些微-KV 库/源代码]。

快乐编码。

于 2011-07-01T05:23:05.107 回答