快速索引格式为“常量数据库”

我在linux上进行c编程,遇到了一个需要非常快的查找速度的问题。

如果一个表像正常的MySQL表一样,如下所示:

ID name age sex score_a score_b score_c date 

这是恒定的 ,这意味着一旦创build了该表并且不允许更新。 它只用于阅读。 由于它是不变的,所以我猜想必须有一个更好的索引格式,以便按照条件(如年龄,分数等)快速查找,而不是在大多数索引数据库中实现的“B树索引”。

你打算进行基于范围的搜索(“10岁到12岁,13岁和15岁等)”,“评分在40到60,61和70等之间”)或单值搜索(名字是Quentin Smith ') 或两者? 对于单值搜索,散列是合适和快速的; 特别是基于范围的搜索,B树及其变体往往是最好的。

您正在查看原始数据每行50个字节的区域,因此您需要处理1/2 GB到15 GB的数据。 如果它在这个范围的上端,那么你需要一个大的机器来保存内存中的普通数据,更别说索引了。 在范围的低端,这是合理的范围内。 假设您为每个列索引,索引可能会比原始数据占用更多的空间(可能多50%)。 名字索引当然是最大的。 如果您可以将ID列用作记录数组的索引,则ID列可能不需要索引,但数据中可能存在空位,因此无论如何都最好对其进行索引。

看到我对你的问题的评论。 总之,如果数据是不变的,我会假设你需要运行的查询是相当不变的?

大多数现代RDBMS都支持某种形式的查询缓存。 如果你没有,你可以缓存你的查询结果像memcached。 生成缓存的速度会很慢,但是如果缓存查找保持在本地,则与索引查找(通常是O(1))相比,速度会非常快。

有许多基于文件的常量数据库也可以考虑。 在stackoverflow或谷歌或必应搜索“常量数据库”,你会发现一些像:

mcdb https://github.com/gstrauss/mcdb/ (为此我是作者)

东京内阁http://fallabs.com/tokyocabinet/

hamsterdb http://www.hamsterdb.com

还有其他的