我需要跟踪一组文件的大量inotify消息,这些文件在生存期内将在几个特定目录之间移动,inode保持不变;我需要跟踪这些inotify消息的移动,以及对文件内容的创建/删除和更改。每秒会有数百次变化。
由于资源有限,我不能将其全部存储在RAM (或磁盘或数据库)中。
幸运的是,这些文件中的大多数将在短时间内被删除;只需存储文件内容和移动历史以供以后分析。未立即删除的文件最终将在特定目录中保留一段已知时间。
因此,在我看来,我需要一个部分存储在RAM中,部分保存到磁盘的数据结构;保存到磁盘的部分需要重新调用(未删除的文件),但大多数都不会。我不需要查询数据,只需要通过一个标识符(文件名,它是A-Z0-9{8})访问它。能够配置何时将文件数据刷新到磁盘将很有帮助。
这种野兽真的存在吗?
发布于 2011-07-01 13:23:05
为什么不是数据库呢?说SQLite。
虽然就空间而言,SQLite不是最有效的存储机制,但它有许多优点--首先也是最重要的是,它是一种SQL RDBMS。可以通过cache_size pragma配置SQLite使用的内存量(用于临时缓存数据)。
如果SQLite不是一个选项,那么"key value stores"中的一个呢?它们的范围从分布式客户机/服务器内存中(例如memcached)到基于本地嵌入式磁盘的(例如BDB),再到具有持久溢出支持的内存以及介于两者之间的任何地方等等。它们没有SQL DDL/DQL (尽管有些可能允许关系),但它们的工作效率很高--存储键和值。
当然,人们总是可以实现一个LRU结构(比如一个基本的有限制的排序列表),同时溢出到一个简单的可扩展的基于磁盘的散列实现……但是..。首先考虑上面:)也可能有一些微型KV库/源代码。
祝你编码愉快。
https://stackoverflow.com/questions/6543833
复制相似问题