bitset儲存使用者和歌曲的購買關係

2021-07-30 19:16:55 字數 888 閱讀 1167

1億個使用者,1000萬首歌,當使用者第一次購買了這首歌,後續就可以永久免費了,

如何記錄這個使用者和歌的對應關係。方案是很多的,可以記錄資料庫,放到redis裡面等都是可以的,

但是隨著使用者和歌曲關係的增加,資料庫或是redis是抗不住的,理論上使用者和歌曲的關係有1億*1000萬中關係,

要記錄所有的關係,資料庫或是redis都是不能滿足的。

bitset的原理可以參考

,也可以自己google。

第一種場景(bitset不稀疏):

第二種場景(bitset 稀疏):

如果使用者數目很多很大,購買的歌曲又很少,比如上面的場景1億使用者,如果用bitset,乙個使用者要記錄與所有歌曲的對應關係需要1.2m, 那表示所有對應關係理論上需要1.2億m,這個是多大的記憶體(我腦子算不過來了)。這種場景下乙個使用者對應的歌曲很少,bitset很稀疏(bitset裡面為1的個數很少,用過用rle壓縮演算法,所需要的記憶體也是非常非常大的),使用bitset不僅不能節約記憶體,還比redis直接用list或set儲存使用者歌曲關係還要耗記憶體。下面提出一種對bitset的改進方法,使用bloomfilter來儲存。將使用者id和歌曲id連個拼接起來,作為乙個唯一表示,然後放入bloomfilter裡面。理論上用多少個使用者,bloomfilter裡面就有多少個元素,這樣可以達到降低記憶體使用率。但是bloomfilter減低記憶體使用率是犧牲了正確性的,會出現誤報(會出現沒有購買的使用者計算為購買),hash演算法選取的好,已經bitset位很大,誤報率會很低很低。

下面附上測試資料,具體參考

bitmap的實現參考:

bloomfilter參考:

cfilter參考: 

歌曲和商品推薦背後的演算法

這就是 amazon 發明的 喜歡這個商品的人,也喜歡某某 演算法。其核心是數學中的 多維空間中兩個向量夾角的余弦公式 當初我的確是被這演算法驚豔到了。商品推薦 系統的演算法 collaborative filtering 分兩大類 第一類,以人為本,先找到與你相似的人,然後看看他們買了什麼你沒有買...

儲存的使用者名稱和密碼

在windows xp pro裡,經常需要訪問 儲存使用者名稱和密碼 對話方塊,例如增加遠端計算機的訪問憑據,或者刪除microsoft passport的登入資訊。但是這個元件隱藏的比較深,可以借助以下兩種方式 1.在控制面板裡開啟 使用者帳戶 選擇當前登入帳戶,然後單擊左上方的 管理我的網路密碼...

TableStore 使用者畫像資料的儲存和查詢利器

使用者畫像資料是一種資料規模較大 資料結構複雜 查詢種類多的資料,是公司差異化運營的基礎,是打造 千人千面 智慧型化的核心資料,幫產品找到最佳目標客戶,對各種產品而言是一種很有價值的資料。我們接下來先看一下使用者畫像資料的場景和特徵,僅以儲存和查詢的角度看一下使用者畫像資料的儲存選擇。使用者畫像的資...