mysql按位搜尋 MySQL按位運算,布隆過濾器

2021-10-17 22:10:29 字數 1061 閱讀 9829

布隆過濾器本質上需要表掃瞄來評估匹配。在mysql中,沒有布隆過濾器型別。簡單的解決方案是將布隆過濾器的位元組對映到bitinteger(8位元組字)並在查詢中執行檢查。因此,假設bloom過濾8個位元組或更少(乙個非常小的過濾器),你可以執行乙個準備好的語句,如:

select * from test where cast(filter, unsigned) & cast(?, unsigned) = cast(?, unsigned)

並將引數替換為您要查詢的值。但是,對於較大的過濾器,您必須建立多個filter列,並將目標過濾器拆分為多個單詞。你必須轉為無符號才能正確地進行檢查。

由於許多合理的布隆過濾器在kilo到megabyte範圍內,因此使用blob來儲存它們是有意義的。切換到blob後,沒有本機機制來執行位元組級比較。並且在整個網路中提取整個大型blob表以在本地**中進行過濾沒有多大意義。

我找到的唯一合理的解決方案是udf。 udf應接受char*並對其進行迭代,將char*轉換為unsigned char*並執行target & candidate = target檢查。此**看起來像:

my_bool bloommatch(udf_init *initid, udf_args *args, char* result, unsigned long* length, char *is_null, char *error)

if (args->lengths[0] > args->lengths[1])

return 0;

char* b1=args->args[0];

char* b2=args->args[1];

int limit = args->lengths[0];

unsigned char a;

unsigned char b;

int i;

for (i=0;i

a = (unsigned char) b1[i];

b = (unsigned char) b2[i];

if ((a & b) != a)

return 0;

return 1;

此解決方案已實施且可用here

位 mysql 查詢 Mysql 查詢 按位運算

前言 雖說這是件小事兒,但本寶寶思前想後,還是為它留下一筆,嘿嘿。反正寫部落格不浪費紙和筆!好久沒有開啟我的逗比模式了,我親愛的乖徒弟dba,dbb,dbaa等,好久不見你們,遙祝幸福快樂 db。整個事情其實使這樣的,最近的專案中,有乙個表,最終是這樣的 一共 位,每一位的取值是 和 額,後來還有 ...

mysql 按時間搜尋 按日期搜尋mysql效能

我有乙個包含大約1億條記錄的大表,其字段為start date和end date,具有date型別.我需要檢查一些日期範圍的重疊次數,比如介於2013 08 20和2013 08 30之間,所以我使用了.select count from mytable where end date 2013 08...

按位AND和按位OR

description 已知長度為n的兩個位串a和b,求它們的按位and和按位or。input 多組測試資料,每組測試資料第1行輸入位串長度n 0 n 64 第2行輸入n個以空格隔開的取值為0或1的整數表示位串a,第3行輸入n個以空格隔開的取值為0或1的整數表示位串b。output 每組測試資料佔兩...