Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用于';常量数据库';_C_Database_Linux_Algorithm - Fatal编程技术网

C 用于';常量数据库';

C 用于';常量数据库';,c,database,linux,algorithm,C,Database,Linux,Algorithm,我正在linux上进行c编程,遇到了一个需要非常快的查找速度的问题 如果一个表与普通MySQL表类似,如下所示: ID name age sex score_a score_b score_c date 并且它是常量,这意味着一旦创建了此表,就不允许更新。它只为阅读服务。因为它是常量,所以我想一定有更好的索引格式,可以根据条件(如年龄、分数等)更快地查找,而不是在大多数数据库中实现“B树索引”。请参阅我对您的问题的评论。简言之,如果数据是常量,我会假设您需要对其运行的查询

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

如果一个表与普通MySQL表类似,如下所示:

ID   name   age   sex  score_a   score_b  score_c  date

并且它是常量,这意味着一旦创建了此表,就不允许更新。它只为阅读服务。因为它是常量,所以我想一定有更好的索引格式,可以根据条件(如年龄、分数等)更快地查找,而不是在大多数数据库中实现“B树索引”。

请参阅我对您的问题的评论。简言之,如果数据是常量,我会假设您需要对其运行的查询也是相当常量的


大多数现代RDBMS都支持某种形式的查询缓存。如果您的查询没有,您可以将查询结果缓存在memcached之类的文件中。生成缓存会很慢,但如果缓存查找保持在本地,与索引查找相比,它会非常快-通常为O(1)。

您将进行基于范围的搜索(“年龄在10到12岁之间,13到15岁之间,等等”,“分数在40到60之间,61到70之间,等等”)还是单值搜索(“名字是昆汀·史密斯”)或两者兼而有之?对于单值搜索,哈希是合适且快速的;特别是对于基于范围的搜索,B-树及其变体往往是最好的


对于原始数据,每行大约有50个字节,因此需要处理1/2GB到15GB的数据。如果它在这个范围的上限,你就需要一台大机器来保存内存中的普通数据,更不用说索引了。在范围的低端,它完全在合理的范围内。假设对每一列进行索引,索引可能会比原始数据占用更多的空间(可能会多50%)。当然,名称索引将是最大的。如果可以将ID列用作记录数组的索引,则ID列可能不需要索引,但数据中可能存在缺口,因此最好还是对其进行索引。

也可以考虑使用大量基于文件的常量数据库。 在stackoverflow或Google或Bing中搜索“常量数据库”,您会发现类似的内容:

mcdb (我是作者)

东京内阁

仓鼠


。。。还有其他方法。

看起来哈希将是唯一的方法。@PasteBT哈希不支持过滤,我想这可能不适合meI需要更多信息。您所说的“快”和“不够快”是什么意思?您正在运行什么类型的查询,以及您的过滤器有多复杂?您是一次又一次地运行相同的查询,还是它们变化很大?表中有多少行?您应该首先定义此表上的查询形式。如果您只是通过某个给定的ID进行查看,这是一回事;如果您需要涉及多个字段之间的关系和算术的复杂表达式,这是另一回事。如果您想要集合操作或联接,这是另一回事。“fast”意味着比大多数数据库索引(如MySQL)和查询缓存更快,我需要比这更具体的东西。你的录取标准是什么?目前的“缓慢”造成了什么更大的问题?