在MongoDB中保存bitarrays

时间:2015-08-23 18:39:19

标签: python mongodb bitarray database

我正在我的公司构建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
}

正如您所看到的,位阵列当前表示为字符串,而Bloom过滤器位阵列可以获得 huge 以获得更大的容量。我的数据库中的单个文档现在大约是 5兆字节,这很糟糕。

如果它无论如何都有帮助,我用Python编程并使用PyMongo作为适配器。

我当然认为这不是保存bitarray的正确方法,我无法在互联网上的其他地方找到帮助。请帮帮我。

1 个答案:

答案 0 :(得分:3)

我发现我可以使用BSON二进制数据类型来完成我的工作。 要序列化我的Bloom过滤器对象,我这样做了:

from bson.binary import Binary

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

请注意,bitarray是Python bitarray库,而不是BitString。最终字典serialized很容易插入到MongoDB中。

希望这有助于任何寻找此事的人。 干杯:)