.net 基于文件的查找表

.net 基于文件的查找表,.net,io,nosql,.net,Io,Nosql,我有大量的顺序整数需要查找,即我需要获取序列整数id的偏移量。问题是,由于内存限制,我宁愿不将整个表加载到内存中来构建哈希表/字典,那么该怎么办 一种可能有效的解决方案是,使用一个文件,其中存储的第一个整数是使用的最低id,然后将一个零整数数组(每个id对应一个整数)写入最大值(需要时追加),并在正确的位置写入id。例如,如果最低id为1000,并且希望获取20000处的偏移量,则只需检索10000+20000-1处的整数 使用内存映射,这种技术应该表现得很好。有没有人遇到过类似的问题,这是一个

我有大量的顺序整数需要查找,即我需要获取序列整数id的偏移量。问题是,由于内存限制,我宁愿不将整个表加载到内存中来构建哈希表/字典,那么该怎么办

一种可能有效的解决方案是,使用一个文件,其中存储的第一个整数是使用的最低id,然后将一个零整数数组(每个id对应一个整数)写入最大值(需要时追加),并在正确的位置写入id。例如,如果最低id为1000,并且希望获取20000处的偏移量,则只需检索10000+20000-1处的整数

使用内存映射,这种技术应该表现得很好。有没有人遇到过类似的问题,这是一个很好的解决方案还是有更好的方法?

您可以使用专门针对硬盘使用而优化的


几乎所有现代数据库和文件系统都使用B树。

您可以选择数据库。如果不需要多个应用程序/进程访问数据,可以使用SQLite。这会自动为您创建索引,并允许您使用SQL查询来检索信息。

数据多久会更改一次?Id将连续添加到其中(可能会有一些细微的间隙),稍后可能会进行填充,但通常在设置Id时会很有趣。如果在id的B-树中有很大的间隙,那么就不必存储过多的空键,但我看不出它们在这里提供的优势,因为您必须进行搜索而不是直接搜索lookup@MattiasK:如果您经常更新数据,B-树会更好。如果你从不更新它,你的想法可能是最好的。b-树不需要对任何单个项目进行完全扫描,它是一个O(logn)操作来遍历中间节点以找到合适的叶节点。在大多数情况下,B-树搜索足够快,因此您永远不需要对B-树的叶节点进行完整扫描。您可以进一步优化数据的存储方式,并使用B+树。谢谢,我知道数据库是什么,不要让nosql标签欺骗您;)我想你会:P。然后出现的问题是:为什么这不符合你的需要?我建议这样做的原因是,它看起来像一个合适的解决方案,因为它是一个B-树解决方案,其中的工作是为您完成的。