Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 - Fatal编程技术网

使用c保存哈希表以加快随机访问

使用c保存哈希表以加快随机访问,c,database,C,Database,我正在编写一个C代码(称之为数据库生成)处理一个输入文件,生成一个范围为[1,10^8]的数字,以及一个长度固定但未知的浮点值序列,后跟3个整数。所有值都用空格分隔 例如: 19432 23.45 32.12 45.76 ...(156 such float values) 4 6 106 这将是一行数据库,其中第一个数字是散列索引(1到10^8),最后3个整数分别表示x、y和文档ID 我们的数据库保存在xyz文件中,该文件包含以下内容 2341 34.67 43.13 ... (234 su

我正在编写一个C代码(称之为数据库生成)处理一个输入文件,生成一个范围为[1,10^8]的数字,以及一个长度固定但未知的浮点值序列,后跟3个整数。所有值都用空格分隔

例如:

19432 23.45 32.12 45.76 ...(156 such float values) 4 6 106
这将是一行数据库,其中第一个数字是散列索引(1到10^8),最后3个整数分别表示x、y和文档ID

我们的数据库保存在xyz文件中,该文件包含以下内容

2341 34.67 43.13 ... (234 such float values) 5 8 123
2352 46.92 41.89 ... (51 such float values) 1 9 145
2352 46.92 41.89 ... (98 such float values) 2 7 12
2359 12.71 72.90 ... (141 such float values) 8 12 13
当我们从一行到下一行时,数据库中的起始数字(散列索引值)将始终以非递减顺序排列

我有另一个C代码(称之为检索),它以散列索引值作为输入,并应输出以该值开头的所有行

我有两个问题

  • 如何确保检索直接跳转到包含询问的哈希索引值的行,跳过数据库的起始行,以便其响应速度更快

  • 当我得到数据库的另一个输入文件时,它的散列索引值是2352。如何在数据库中的适当位置添加另一行,以2352开头

  • 我正在考虑以下不理想的方法,因为数据库不会按要求的哈希索引值的非递减顺序组织。此外,数据库被分为两个组件。一个包含每个哈希索引的字节偏移量条目,另一个是上面显示的数据库文件

    它涉及

    (1)byte-offset.txt of the form
    2341 byte-pos-1
    2352 byte-pos-2
    2359 byte-pos-3
    2352 byte-pos-4
    (2)database.txt of the form
    2341 34.67 43.13 ... (234 such float values) 5 8 123
    2352 46.92 41.89 ... (51 such float values) 1 9 145
    2359 12.71 72.90 ... (141 such float values) 8 12 13
    2352 46.92 41.89 ... (98 such float values) 2 7 12
    

    唯一的好处是,当我们获得更多数据时,随着数据库的增长,新条目可以附加到每个文件的末尾。

    为什么不使用现有的数据库库,如sqlite3或dbm。您是否考虑过使用B+树?如果您不必出于任何原因构建自己的数据库,是的,继续使用sqlite,您可以在C程序中使用它。请看:我正在寻找的数据库有快速查找,可以纳入我的c程序。我不太擅长编程,所以编写b+树对我来说很困难。sqlite看起来不错。我会尝试使用它。