2010-08-19 23 views

回答

1

如果您有内存中的解决方案,则可以使用内存映射文件和自定义分配器来实现持久性存储。

+0

这是不正确的。首先,内存中的解决方案对于碎片而言是稳定的,因为操作系统中存在内存页面。动态内存分配和文件存储中的释放有很多问题。其次在32位系统上有2GB的限制。 – 2010-08-19 12:15:00

+0

@alexey任何基于文件的解决方案都容易出现碎片,但合适的自定义分配器可以将其最小化。 如果您希望有一个更大的数据集,则2GB的限制可能会成为问题。您可以使用多个映射文件,但这可能会变得太复杂而不可行。 这个问题并没有说你需要在32位系统上超过2GB。也许这是由文件存储的需要所暗示的,但我并不这样理解。 (抱歉)。 – 2010-08-19 12:28:00

+0

另一个问题是如何将现有文件与数据附加到多索引容器。 – 2010-08-19 12:39:19

1

恐怕我不知道。

对于硬盘存储,我只能推荐看一下STXXL,它建议STL容器和算法适用于只适合磁盘的数据。他们已经实现了许多功能以实现更平滑的操作,主要是尽可能地缓存在内存中,并尽可能延迟磁盘访问。

现在不会让你一个多指标,但至少你将有一个STL :)

然后,如果你有决心,你可以端口多指数使用由STXXL提供的设施:它们已经解密了容器本身的IO访问/内存缓存。

或者你可以简单地根据他们的STL兼容容器写出你需要的东西。

1

SQLite怎么样?它可以使用磁盘作为后备存储,并支持多个索引数据,如Boost Multi Index所做的那样。

相关问题