我有一個表矢量類型位(2000)。數據庫引擎如何處理操作和和或超過此值?它是否簡單地分成32位塊(或分別爲64),然後分別比較每個塊,最後只是將結果連接在一起?還是隻處理兩個字符串?postgres如何處理位數據類型?
我的觀點是預測,哪種用例會更快。我得到了一個鍵值數據(user-item)。
userID | itemID
U1 | I1
U1 | Ix
Un | Ij
對於i要計算的n個最近鄰居列表(使用jaccard index,例如)每個用戶。
select my_jaccard(select itemID from table where userID=U1,select itemID from table where userID=U2)
我的解決方案 - I解析的輸入數據到用戶矢量的表,其中所述載體是類型位(2000)與1對錶示所述特定項目的位置。
userID | vector
U1 | 00.......01
U1 | 0..1.....00
Un | 00..1..1..0
在此表中我根本
select vector1&vector2
的一點是,每個用戶具有至多隻有10個記錄的所有項目,即,矢量具有最大的10個活動位。我認爲,解析整個bitvector只是爲了找到活動位需要更多的計算資源,而不是簡單地將user1的10個值和user2的10個值與另一個的值進行比較。
使用位數很少設置爲1的長位矢量更快嗎?還是更好地將原始值用作集合並將兩個集合相比較? (一組具有最大的10個項目)
我同時使用PSQL V8.2和v9.x的
爲什麼過時的V8引擎。 2?你需要在v9.x中指定'x'來聲明一個Postgres版本。 –
@ErwinBrandstetter:thx,計算是否依賴於版本?我使用8.2,因爲它是一個生產實例,我無法更改。 v9.x可以是任何人,因爲這是一個測試實例,我可以將其更改爲這種情況下更好的一種。如果答案取決於版本,我需要知道差異,所以我們假設所有版本從8-9.x – ulkas