我有大量文本文件需要执行各种操作,主要涉及逐行验证。这些数据通常是销售/交易性质的,并且往往包含大量冗余信息,如客户姓名等。迭代和操作这些数据已经成为了一个常见的任务,因此我正在用C语言编写一个库,希望将其作为Python模块提供。
在一次测试中,我发现在130万列值中,只有约30万个是唯一的。内存开销是一个问题,因为我们基于Python的Web应用程序可能会处理大型数据集的同时请求。
我的第一次尝试是读取文件并将每个列值插入到二叉搜索树中。如果该值以前从未出现过,则分配内存来存储字符串,否则返回指向该值现有存储的指针。对于大约10万行的数据集,这种方法运行良好。对于更大的数据集,一切都变得非常缓慢,而且内存消耗急剧增加。我认为树中所有这些节点指针的开销没有起到帮助作用,并且使用strcmp进行二进制搜索变得非常痛苦。
这种不令人满意的性能让我相信我应该投资使用哈希表。然而,这引出了另一个问题 - 我事先不知道有多少记录。它可能是10条,也可能是一千万条。如何在时间/空间之间取得正确的平衡,以防止反复调整哈希表大小?
在这种情况下,哪些数据结构是最佳选择?
谢谢您的时间。
在一次测试中,我发现在130万列值中,只有约30万个是唯一的。内存开销是一个问题,因为我们基于Python的Web应用程序可能会处理大型数据集的同时请求。
我的第一次尝试是读取文件并将每个列值插入到二叉搜索树中。如果该值以前从未出现过,则分配内存来存储字符串,否则返回指向该值现有存储的指针。对于大约10万行的数据集,这种方法运行良好。对于更大的数据集,一切都变得非常缓慢,而且内存消耗急剧增加。我认为树中所有这些节点指针的开销没有起到帮助作用,并且使用strcmp进行二进制搜索变得非常痛苦。
这种不令人满意的性能让我相信我应该投资使用哈希表。然而,这引出了另一个问题 - 我事先不知道有多少记录。它可能是10条,也可能是一千万条。如何在时间/空间之间取得正确的平衡,以防止反复调整哈希表大小?
在这种情况下,哪些数据结构是最佳选择?
谢谢您的时间。