gpt4 book ai didi

c++ - 将 url 存储到文件中,以便可以快速访问它们

转载 作者:行者123 更新时间:2023-11-28 06:55:08 24 4
gpt4 key购买 nike

我有一个文件和大量的 url,这些 url 被写入一个文件,所有这些都具有相同的结构加上一个 int 类型的 url CheckSum。 stackoverflow.com 写成:

    12534214214 http://stackoverflow.com

现在每次我想将 url 放入文件时,我都需要检查 url 是否不存在然后我可以把它。但是使用 1 000 000 个 url 来执行此操作需要花费太多时间:

    //list of urls
list<string> urls;
size_t hashUrl(string argUrl); //this function will hash the url and return an int
file.open("anchors");
//search for the int 12534214214 if it isn't found then write 12534214214 http://stackoverflow.com
file.close();

问题 1:-我如何使用校验和在文件中搜索,以便搜索花费几毫秒?

问题 2:-是否有另一种存储这些 url 以便可以快速访问它们的方法?

谢谢,抱歉英语不好

最佳答案

您(可能 [1])无法在“几毫秒”内搜索纯文本文件中的一百万个 URLS。您需要将整个文件加载到内存中(当您这样做时,您也可以将其加载到一些合理的数据结构中,例如 std::mapstd::unordered_map),或者对文件使用某种索引——例如,有一个较小的文件,其中只有校验和以及它们在文件中的存储位置。

纯文本文件的问题是没有办法知道任何东西在哪里。一行可以是 10 个字节,另外一行可以是 10000 个字节。这意味着您实际上必须读取您感兴趣的每个字节。

当然,另一种选择是使用数据库库、SQLite 等(或适当的数据库服务器,如 MySQL),允许基于“查询”存储/检索数据。这隐藏了所有索引生成和其他此类问题,并且在搜索算法以及具有智能缓存和优化代码以读取/写入数据到磁盘等方面都已经过优化。

[1] 如果所有的 URLS 都很短,那么文件可能足够小,可以很好地缓存,并且可以编写足够快的代码以在几毫秒内线性扫描整个文件。但是一个文件,比方说,每个 URL 平均有 50 个字节将是 50MB。如果每个字节需要 10 个时钟周期来处理,那么我们已经用了 130 毫秒来处理文件,即使它直接在内存中可用。

关于c++ - 将 url 存储到文件中,以便可以快速访问它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com