在 MongoDB 中保存位数组
Saving bitarrays in MongoDB
我正在公司构建布隆过滤器,需要将它们序列化并保存到 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 作为适配器。
我当然认为这不是保存位数组的正确方法,而且我在 Internet 上的其他地方找不到帮助。请帮帮我。
我发现我可以使用 BSON 二进制数据类型来完成我的工作。
为了序列化我的布隆过滤器对象,我这样做了:
from bson.binary import Binary
obj = BloomFilter()
serialized = obj.__dict__.copy()
serialized['bitarray'] = Binary(obj.bitarray.tobytes())
请注意,bitarray 是 Python bitarray 库,而不是 BitString
。最终的字典 serialized
很容易插入 MongoDB.
希望这对正在寻找它的人有所帮助。
干杯:)
我正在公司构建布隆过滤器,需要将它们序列化并保存到 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 作为适配器。
我当然认为这不是保存位数组的正确方法,而且我在 Internet 上的其他地方找不到帮助。请帮帮我。
我发现我可以使用 BSON 二进制数据类型来完成我的工作。 为了序列化我的布隆过滤器对象,我这样做了:
from bson.binary import Binary
obj = BloomFilter()
serialized = obj.__dict__.copy()
serialized['bitarray'] = Binary(obj.bitarray.tobytes())
请注意,bitarray 是 Python bitarray 库,而不是 BitString
。最终的字典 serialized
很容易插入 MongoDB.
希望这对正在寻找它的人有所帮助。 干杯:)