【问题标题】:Library for maintaining on-disk cache [closed]用于维护磁盘缓存的库 [关闭]
【发布时间】:2011-10-12 16:12:47
【问题描述】:

我正在寻找 C/C++/Obj-C 的库来维护我的对象的磁盘缓存。

  • 有大量对象(数万个),每个对象大小为 100+Kb
  • 不断访问/添加对象,有时会替换大量对象

目前我只是将每个对象存储在单独的文件中,但我不想在文件系统中创建这么多文件。是否有任何库可以使用这样的缓存来代替使用一个/多个文件?

【问题讨论】:

  • 压缩库可以做到这一点。请参阅此 [问题][1]。 [1]:stackoverflow.com/questions/230984/…
  • 您可以创建一个对象,该对象将保存您的所有文件并使其序列化以将其保存为二进制文件,并添加方法以仅在需要时读取和写入文件(它的性能是关心你)

标签: objective-c c caching


【解决方案1】:

您可以使用所有对象创建一个集合(NSArray、NSSet、NSDictionary),并使用 NSKeyedArchiver/NSKeyedUnarchiver 将其放入单个文件中。

您还可以使用 SQLite 数据库或 CoreData,其优点是您不必一次将所有内容加载到内存中,如果您只需根据需要从内存中提取对象即可。尤其是如果您有(数万 * 100+Kb,无论如何都无法放入内存...)。

您还可以使用 C++ 序列化库(尽管让它们与 obj c 对象一起使用会很棘手......,更推荐用于 C++ 对象),例如 boost 序列化/归档(可以输出二进制、文本、xml),再次强调可以使用集合(std::list、std::map ...)将它们全部存储到一个文件中。

【讨论】:

  • 我正在考虑使用 SQLite,但我不知道它对许多大型对象的性能有多好。另外我不需要 SQL,简单的 key->blob 存储就足够了。我认为应该有一些专门的缓存库,但我找不到。
  • 来自 SQLite 网站:SQLite 中字符串或 BLOB 中的最大字节数由预处理器宏 SQLITE_MAX_LENGTH 定义。该宏的默认值为 10 亿(1 亿或 1,000,000,000)。 sqlite.org/limits.html
【解决方案2】:

我使用东京内阁图书馆解决了我的问题。比为每个对象使用单独的文件更快。

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2016-07-16
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2011-03-06
    相关资源
    最近更新 更多