SQL位運算
做網站的人都應該明白
有一些瓷,不可說,說不得,不可思,不可議.
但是,你懂的.
結構和資料:
單位的敏感詞庫,同樣的敏感詞,不同的模組認定卻不一樣.
比如大寶劍,作為暱稱輸入,認為他是敏感詞,直接過濾;但是內容的模組,聊天的模組卻不認為是敏感詞.
也可以考慮用SQL位運算的方式設計.
假設現在一共有如下模組,
暱稱 2
內容 4
聊天 8
歌詞 16
評論 32
每個模組代表一個二進位制位,如果一個詞在所有的模組都是敏感詞,他的module (11111),轉為10進位制(2+4+8+16+32)=64
設定大寶劍在暱稱,內容,歌詞模組為敏感詞
設定官窯在內容,聊天模組為敏感詞
設定民窯在暱稱,聊天模組為敏感詞
應用在啟動的時候,拉取暱稱的敏感詞.
這樣的好處是
1.動態擴充套件模組而不需要修改表結構.否則每增加一個模組,就需要增加一個欄位.
2.同時拉取多個模組的敏感詞也比較簡單,比如同時拉取暱稱和歌詞的敏感詞
where module & (16+2) = (16+2)
MySQL相關二進位制操作
Oracle 有bitand函式
有一些瓷,不可說,說不得,不可思,不可議.
但是,你懂的.
結構和資料:
- create table SENSITIVE_WORD(
- id int primary key auto_increment,
- word varchar(20) not null,
- module int
- );
- insert into SENSITIVE_WORD(word) values('官窯');
- insert into SENSITIVE_WORD(word) values('民窯');
- insert into SENSITIVE_WORD(word) values('大寶劍');
- commit;
單位的敏感詞庫,同樣的敏感詞,不同的模組認定卻不一樣.
比如大寶劍,作為暱稱輸入,認為他是敏感詞,直接過濾;但是內容的模組,聊天的模組卻不認為是敏感詞.
也可以考慮用SQL位運算的方式設計.
假設現在一共有如下模組,
暱稱 2
內容 4
聊天 8
歌詞 16
評論 32
- mysql> select id,power(2,id) from nums where id<=5;
- +----+-------------+
- | id | power(2,id) |
- +----+-------------+
- | 1 | 2 |
- | 2 | 4 |
- | 3 | 8 |
- | 4 | 16 |
- | 5 | 32 |
- +----+-------------+
- 5 rows in set (0.08 sec)
每個模組代表一個二進位制位,如果一個詞在所有的模組都是敏感詞,他的module (11111),轉為10進位制(2+4+8+16+32)=64
設定大寶劍在暱稱,內容,歌詞模組為敏感詞
設定官窯在內容,聊天模組為敏感詞
設定民窯在暱稱,聊天模組為敏感詞
- update SENSITIVE_WORD set module=(2+4+16) where word='大寶劍';
- update SENSITIVE_WORD set module=(4+8) where word='官窯';
- update SENSITIVE_WORD set module=(2+8) where word='民窯';
- mysql> select * from SENSITIVE_WORD;
- +----+--------+--------+
- | id | word | module |
- +----+--------+--------+
- | 1 | 官窯 | 12 |
- | 2 | 民窯 | 10 |
- | 3 | 大寶劍 | 22 |
- +----+--------+--------+
- 3 rows in set (0.00 sec)
應用在啟動的時候,拉取暱稱的敏感詞.
- mysql> select * from SENSITIVE_WORD where module & 8=8;
- +----+------+--------+
- | id | word | module |
- +----+------+--------+
- | 1 | 官窯 | 12 |
- | 2 | 民窯 | 10 |
- +----+------+--------+
- 2 rows in set (0.00 sec)
這樣的好處是
1.動態擴充套件模組而不需要修改表結構.否則每增加一個模組,就需要增加一個欄位.
2.同時拉取多個模組的敏感詞也比較簡單,比如同時拉取暱稱和歌詞的敏感詞
where module & (16+2) = (16+2)
MySQL相關二進位制操作
- # BIN(N)返回二進位制值N的一個字串表示
- mysql> select bin(123);
- +----------+
- | bin(123) |
- +----------+
- | 1111011 |
- +----------+
- 1 row in set (0.00 sec)
- # OCT(N)返回八進位制值N的一個字串表示
- mysql> select oct(123);
- +----------+
- | oct(123) |
- +----------+
- | 173 |
- +----------+
- 1 row in set (0.00 sec)
- # HEX(N)返回十六進位制值N的一個字串表示
- mysql> select hex(123);
- +----------+
- | hex(123) |
- +----------+
- | 7B |
- +----------+
- 1 row in set (0.00 sec)
- mysql> select concat('0x', hex(123));
- +------------------------+
- | concat('0x', hex(123)) |
- +------------------------+
- | 0x7B |
- +------------------------+
- 1 row in set (0.00 sec)
Oracle 有bitand函式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1966195/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 位運算與SQL實現SQL
- 二進位制、位運算、位移運算
- 位運算
- 位運算 --20240310
- 理解位運算
- 使用位運算進行加法運算
- day14.邏輯運算,位運算
- PHP 位運算使用PHP
- 位運算小結
- 位運算-異或(^)
- 位運算總結
- 【SSLOJ 3348】位運算
- 巧用JS位運算JS
- 學習位運算
- 位運算進階
- java二進位制運算十進位制(精確運算)Java
- 計算機基礎:位運算計算機
- 位運算簡單操作
- Java中的位運算Java
- 位運算子的計算
- 神奇的位非運算
- JS中的位運算JS
- 位運算的應用
- Java位運算小節Java
- C語言位運算C語言
- 1的個數 【位運算】
- 演算法之位運算演算法
- Lesson11——NumPy 位運算
- 【每日演算法】位運算演算法
- 【演算法】位運算技巧演算法
- C# 位運算及例項計算C#
- 【演算法技巧】位運算裝逼指南 ---- 帶你領略位運算的魅力演算法
- 二進位制與二進位制運算
- 談談位運算和在Android中的運用Android
- 演算法之美 : 位運算演算法
- NumPy常用的位運算函式函式
- 位運算的奇技淫巧(二)
- JAVA基礎提高之位運算Java
- CSAPP DATA LAB1————位運算APP