我想用MySQL实现一个bloom filter (另一个推荐的替代方案)。
问题如下:
假设我有一个存储8位整数的表,其中包含以下值:
1: 10011010
2: 00110101
3: 10010100
4: 00100110
5: 00111011
6: 01101010我希望找到所有按位计算的结果,并如下所示:
00011000结果应该是第1行和第5行。
然而,在我的问题中,它们不是8位整数,而是n位整数。如何存储,如何查询?速度是关键。
发布于 2008-12-11 21:45:08
创建一个包含int列的表(使用this link选择正确的int大小)。不要将数字存储为0和1的序列。
对于您的数据,它将如下所示:
number
154
53
148
38
59
106你需要找到与24匹配的所有条目。
然后,您可以运行如下查询
SELECT * FROM test WHERE number & 24 = 24如果你想避免在你的应用程序中转换成10个基数,你可以把它交给mysql:
INSERT INTO test SET number = b'00110101';像这样搜索
SELECT bin(number) FROM test WHERE number & b'00011000' = b'00011000'发布于 2008-12-14 05:37:13
为此,请考虑不使用MySQL。
首先,对于超过64位的表,可能没有内置的方法。您将不得不求助于用C编写的用户定义函数。
其次,每个查询都需要一个全表扫描,因为MySQL不能对您的查询使用索引。因此,除非您的表非常小,否则速度不会很快。
发布于 2008-12-17 18:23:36
切换到PostgreSQL并使用位(N)
https://stackoverflow.com/questions/360844
复制相似问题