日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

海量数据,海明距离高效检索(smlar)

發(fā)布時(shí)間:2024/1/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 海量数据,海明距离高效检索(smlar) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(1)什么是海明距離兩個(gè)碼字的對(duì)應(yīng)比特取值不同的比特?cái)?shù)稱為這兩個(gè)碼字的海明距離。在一個(gè)有效編碼集中,任意兩個(gè)碼字的海明距離的最小值稱為該編碼集的海明距離。舉例如下:10101和00110從第一位開始依次有第一位、第四、第五位不同,則海明距離為3。

(2)海明距離的幾何意義n位的碼字可以用n維空間的超立方體的一個(gè)頂點(diǎn)來表示。兩個(gè)碼字之間的海明距離就是超立方體兩個(gè)頂點(diǎn)之間的一條邊,而且是這兩個(gè)頂點(diǎn)之間的最短距離。

(3)海明距離的應(yīng)用場景用于編碼的檢錯(cuò)和糾錯(cuò)經(jīng)過SimHash算法提取來的指紋(Simhash對(duì)長文本500字+比較適用,短文本可能偏差較大,具體需要根據(jù)實(shí)際場景測(cè)試),最后使用海明距離,求相似,在google的論文給出的數(shù)據(jù)中,64位的簽名,在海明距離為3的情況下,可認(rèn)為兩篇文檔是相似的或者是重復(fù)的,當(dāng)然這個(gè)值只是參考值,針對(duì)自己的應(yīng)用可能又不同的測(cè)試取值

到這里相似度問題基本解決,但是按這個(gè)思路,在海量數(shù)據(jù)幾百億的數(shù)量下,效率問題還是沒有解決的,因?yàn)閿?shù)據(jù)是不斷添加進(jìn)來的,不可能每來一條數(shù)據(jù),都要和全庫的數(shù)據(jù)做一次比較,按照這種思路,處理速度會(huì)越來越慢,線性增長。

針對(duì)海量數(shù)據(jù)的去重效率,我們可以將64位指紋,切分為4份16位的數(shù)據(jù)塊,根據(jù)抽屜原理在海明距離為3的情況,如果兩個(gè)文檔相似,那么它必有一個(gè)塊的數(shù)據(jù)是相等的。

那么數(shù)據(jù)庫是否支持這種高效率的檢索呢?

反正PostgreSQL是支持的,通過黑科技smlar插件。

一、需求

二、架構(gòu)設(shè)計(jì)

在PostgreSQL中,從海量數(shù)據(jù)中,搜索海明距離小于N的數(shù)據(jù),有多種設(shè)計(jì)手段。每種方法的能耗比都不一樣,讀者可以按需選擇。

1 暴力計(jì)算

1、單機(jī)多核并行計(jì)算,暴力掃描。采用阿里云RDS PostgreSQL 10提供的多核并行能力,暴力掃描。2、多機(jī)多核并行計(jì)算,暴力掃描。采用阿里云HybridDB for PostgreSQL提供的多級(jí)并行計(jì)算能力,暴力掃描。3、利用GPU、FPGA加速暴力運(yùn)算。PostgreSQL提供了擴(kuò)展接口,可以利用GPU,FPGA的能力對(duì)數(shù)據(jù)進(jìn)行計(jì)算。4、利用CPU向量計(jì)算指令,暴力計(jì)算。PostgreSQL提供了擴(kuò)展接口,可以利用CPU向量計(jì)算指令的能力加速計(jì)算。

2 索引

索引是高效的做法,例如PostgreSQL smlar插件,在阿里的導(dǎo)購平臺(tái)就有使用,用于實(shí)時(shí)導(dǎo)購文的海量相似度查詢。如果要讓smlar加速海明距離的搜索,需要采用更科學(xué)的方法,比如切片。直接使用位置,會(huì)有問題,因?yàn)閟mlar的第一道工序是塊級(jí)收斂,而海明碼是bit64的編碼,在一個(gè)數(shù)據(jù)塊中,有若干條記錄,任何位置都可能同時(shí)出現(xiàn)0和1,任何數(shù)據(jù)塊都包含0和1,因此無法完成第一道過濾。我們可以采用切片,減少這種可能性。例如每2個(gè)BIT一片,或者每4個(gè)BIT一片,或者更多。通常海明距離大于3的,就沒有什么相關(guān)性了。

三、DEMO與性能

1 暴力計(jì)算1、全掃,并行掃描創(chuàng)建測(cè)試表

四、技術(shù)點(diǎn)

1、阿里云RDS PostgreSQL smlar插件,使用GIN索引,塊級(jí)收斂,二重過濾。0.2毫秒的響應(yīng)速度,1000萬數(shù)據(jù)中,檢索海明距離2以內(nèi)的記錄。

2、阿里云RDS PostgreSQL 10,使用多核并行,暴力掃描,1000萬數(shù)據(jù),檢索海明距離為N以內(nèi)的數(shù)據(jù),約450毫秒。

3、阿里云HybridDB for PostgreSQL,使用多機(jī)并行,橫向擴(kuò)展計(jì)算能力,也可以做到暴力掃描。根據(jù)實(shí)際的節(jié)點(diǎn)數(shù)計(jì)算查詢效率。

五、云端產(chǎn)品

阿里云 RDS PostgreSQL:https://www.aliyun.com/product/rds/postgresql

阿里云 HybridDB for PostgreSQL:https://www.aliyun.com/product/gpdb

六、類似場景、案例

《電商內(nèi)容去重\內(nèi)容篩選應(yīng)用(實(shí)時(shí)識(shí)別轉(zhuǎn)載\盜圖\侵權(quán)?) - 文本、圖片集、商品集、數(shù)組相似判定的優(yōu)化和索引技術(shù)》:https://github.com/digoal/blog/blob/master/201701/20170112_02.md

《基于 阿里云 RDS PostgreSQL 打造實(shí)時(shí)用戶畫像推薦系統(tǒng)》:https://github.com/digoal/blog/blob/master/201610/20161021_01.md

七、小結(jié)

采用阿里云RDS PostgreSQL的SMLAR插件,對(duì)千萬量級(jí)的simhash數(shù)據(jù)檢索相似文本,(更多數(shù)據(jù)量的測(cè)試后續(xù)提供,響應(yīng)速度應(yīng)該在毫秒級(jí)),相比沒有索引的情況,性能從23秒提升到了0.2毫秒。提升了11.48萬倍。

總結(jié)

以上是生活随笔為你收集整理的海量数据,海明距离高效检索(smlar)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。