最有效的随机数据访问文件类型

arc*_*ace 1 c++ file-io

我正在编写一个密码生成程序。我收集了大约 30,000 个英文单词的列表,并计划按索引从它们中随机挑选。

目前,我将所有单词都放在一个 .txt 文件中,每个单词都用换行符分隔并按长度组织。

我目前的计划是用 C++ 编写程序,因为这是我最熟悉的语言,所以我可以将整个文件加载到内存中,但这似乎非常草率。

什么是更有效的方法(或必要时使用 JSON 之类的文件类型)来执行此操作?谢谢

tad*_*man 5

30,000 个单词听起来像是要加载的微不足道的数据量。即使它是〜50-500MB,只需加载它并忘记它。

在现代系统上,第一次完成这需要几分之一秒的时间,任何 SSD 都可以达到约 600MB/s+,一旦它在 OS 磁盘缓冲区中就更少了。

如果您的文件太大而无法放入内存,您只需要担心不加载它。

  • @Sukima:https://en.wikipedia.org/wiki/Indexed_file。索引只是文件中每条数据开始的偏移量。如果您的数据是 30k 字符串,那么您将拥有 30k 整数偏移量的索引。要访问字符串 #12345,请查看整数 #12345,如果偏移量为 654321,则您将查找文件中的位置 654321,并读取该字符串。O(1) 时间。这对于内存映射文件非常有效,因为操作系统不必一直将文件保留在内存中。 (3认同)
  • 此外,任何专为优化随机访问而设计的文件格式都会在大小上爆炸,因为在读取填充每个条目到固定大小之前,您必须知道字节偏移量。与将整套读入内存相比,这只是一个非常小的改进,这是不值得的。 (2认同)