假设我们有一个 csv 文件(>5GB),其中包含员工姓名和年龄列。该文件按年龄排序。 现在,我希望用户使用 Age 搜索该文件。有人可以指导我哪种数据结构最适合此要求吗?
示例:
myfile.csv
25 ABC
25 MNP
14 XYZ
14 PQR
输入:
14
输出:
XYZ
PQR
最佳答案
假设文件太大而无法放入 RAM,您可以创建一个索引,这样您就可以最大限度地减少磁盘读取次数(比 RAM 读取慢得多)。
一些常用的磁盘索引是 B+ trees (其中顶层存储在 RAM 中)和 hash tables .
或者,您可以将其存储为 SQL表并让图书馆自己照顾自己。
另一种选择,由于范围相当小(我无法想象年龄大于 200),您可以使用 200 个(或可能更少)不同的文件:names_1,names_2,...,names_200
哪里names_i
包含年龄为 i
的所有姓名的列表。
(此外,由于许多条目中都省略了年龄,因此您实际上可以将其作为 dictionary:age->list<names>
放入 RAM 中)
如果数据适合 RAM - 您可以使用排序数组(如果数据变化不经常/不期望)并使用二分搜索。
如果需要更改数据,可以使用其他一些结构,例如 RAM 上的哈希表,或 self balancing BST
关于python - 用于存储巨大(>5GB)排序文件的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875188/