我可以提高具有重复值的字典的内存效率吗
Can I improve memory efficiency of a dictionary with recurring values
我正在研究 Python 中的搜索引擎实现,理想情况下希望将尽可能多的倒排索引存储到内存中。
索引当前数据结构如下:
{term: [doc_frequency, {doc_number: [doc_positions]}]}
,其中 term
是字符串,doc_frequency
、doc_number
和 doc_positions
是整数。对于多个文档,它的大小真的很快就会爆炸。
由于文档编号和位置经常是不同术语的重复整数,我在想是否有一种方法可以利用这个特性,而不是每次都存储一个新的整数,而是多次引用同一个整数?
我不是数据结构方面的专家,也不是 Python,如果这是一个愚蠢的问题,请原谅我。如果除了我的具体问题还有任何其他建议可以提高内存使用率,我们也非常欢迎。
恐怕存储指向整数而不是整数的指针(引用)将无济于事,因为指针的大小在您的系统上很可能是 64 位(如果您使用的是 32 位,则可能是 32 python).
Python 使用可变大小的整数,但平均每个整数应小于或等于 64 位。如果您最常使用小数字,请参阅:https://www.pythontutorial.net/advanced-python/python-integers/.
如果您可以使用一些有限范围的整数,您可以尝试使用指定数据类型的 numpy,请参阅:https://numpy.org/devdocs/user/basics.types.html。但是,您可能需要更改存储结构。
我正在研究 Python 中的搜索引擎实现,理想情况下希望将尽可能多的倒排索引存储到内存中。
索引当前数据结构如下:
{term: [doc_frequency, {doc_number: [doc_positions]}]}
,其中 term
是字符串,doc_frequency
、doc_number
和 doc_positions
是整数。对于多个文档,它的大小真的很快就会爆炸。
由于文档编号和位置经常是不同术语的重复整数,我在想是否有一种方法可以利用这个特性,而不是每次都存储一个新的整数,而是多次引用同一个整数?
我不是数据结构方面的专家,也不是 Python,如果这是一个愚蠢的问题,请原谅我。如果除了我的具体问题还有任何其他建议可以提高内存使用率,我们也非常欢迎。
恐怕存储指向整数而不是整数的指针(引用)将无济于事,因为指针的大小在您的系统上很可能是 64 位(如果您使用的是 32 位,则可能是 32 python).
Python 使用可变大小的整数,但平均每个整数应小于或等于 64 位。如果您最常使用小数字,请参阅:https://www.pythontutorial.net/advanced-python/python-integers/.
如果您可以使用一些有限范围的整数,您可以尝试使用指定数据类型的 numpy,请参阅:https://numpy.org/devdocs/user/basics.types.html。但是,您可能需要更改存储结构。