我正在我的公司构建bloom过滤器,需要序列化并保存到mongodb中。我当前使用的文档结构如下所示:

{
    '_id': unique ID,
    'm': number of bits in Bloom filter,
    'n': capacity of Bloom filter,
    'k': number of hashes,
    'bitarray': a string of the Bloom filter’s bitarray,
    'seeds': a list of seeds for the k hashes
}

如您所见,bitarray当前表示为字符串,bloom filter bitarray可以获得更大的容量。我数据库中的一个文档现在大约有5兆字节,这很糟糕。
如果它有帮助的话,我用python编程并使用pymongo作为适配器。
我当然相信这不是保存位数组的正确方法,我在互联网上找不到其他帮助。请帮帮我。

最佳答案

我发现我可以使用bson二进制数据类型来完成我的工作。
为了序列化bloom筛选器对象,我执行了以下操作:

from bson.binary import Binary

obj = BloomFilter()
serialized = obj.__dict__.copy()
serialized['bitarray'] = Binary(obj.bitarray.tobytes())

请注意,bitarray是pythonbitarray库,而不是BitString。最后的字典serialized很容易插入到mongodb中。
希望这对任何人都有帮助。
干杯:)

关于python - 在MongoDB中保存bitarrays,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32170120/

10-12 22:35