用redis或者mysql計算相似度的問題?

時間 2021-06-03 20:10:48

1樓:

剛試了試SQL好像可以。Redis是Key-Value型資料庫,我不知道能不能做這種事情。

首先要把商品和商品的Tag存到乙個表裡,每個商品的每個Tag都存作乙個記錄。假如你有三個商品,商品編號分別為1,2,3,商品1有6個Tag,分別為20,22,24,26,28,30,商品2有3個Tag,分別為28,30,32,商品3有2個Tag,分別為30,40,那麼你存這些資訊的表就應該是下面這樣:

Table 1

ID ItemID Tag

1 1 20

2 1 22

3 1 24

4 1 26

5 1 28

6 1 30

7 2 28

8 2 30

9 2 32

10 3 30

11 3 40

接下來可以通過self join和count解決你的問題,假如說你希望檢視所有商品和1商品的相似度,你可以先把和商品1有同樣Tag的商品和它們相同的所有Tag查詢出來,再做乙個計數,最後排序。

SQL語句是這樣:

SELECTt1.

ItemID

,Count(t1

.Tag)AS

Similarity

FROM

Table1

ASt1

,Table1

ASt2

WHEREt1.

Tag=t2.

TagANDt2.

ItemID=1

GROUP

BYt1

.ItemID

ORDER

BYCount(t1

.Tag

)DESC

;結果如下:

ItemID Similarity

1 62 2

3 1如果要和其他商品比較就修改AND那行的資料即可。

2樓:Xi Yang

瀉藥。redis是啥我根本不知道,MYSQL也僅限於了解select什麼的基本操作。

不過這個問題和一些生物資訊問題其實很像,你可以參考一下:把儲存的商品預計算乙個無根樹。

首先利用那些tag定義商品的兩兩距離。

然後就可以建樹了,比如用粗鄙的Neighbor joining演算法,或者更粗鄙的UPGMA演算法。

然後在尋找相似商品的時候,就光按照這個預計算的樹來找;或者先沿著這個樹進行粗鄙的找,然後再用別的代價更高的方法進行精確的找。

redis是否可以代替mysql進行資料儲存?

Tony 簡單地說,Redis儲存的rdb和aof都不是為了查詢,只是乙個備份。如果你想做到Redis支援儲存,同時支援查詢,需要改造Redis。可以參考乙個工具 http 做到這點。否則,還是用MySQL,但MySQL的效率不如Redis,但乙個是SQL,乙個是NoSQL,應用場景不同。 lcam...

讓redis充當mysql快取的時候如何快取mysql的資料關係?

Grissom 使用者資訊 物品資訊此類可以用ID作為key,內容全部序列化後儲存為String,注意修改的之後要清除redis的key,不要嘗試去更新,併發下會寫入髒資料。在關聯查詢,比如獲取我的物品,可以先簡單查詢取需要的物品ID,再使用redis mget獲取快取資訊。對於論壇帖子列表,商品列...

請教redis如何做到和mysql資料庫的同步呢?

彼得潘大叔 用MySQL binlog觸發更新 larry 使用redis作為mysql的二級快取即可,實現org.apache.ibatis.cache.Cache介面寫個MybatisRedisCache這樣的類。修改mysql資料後,可以直接重新整理redis快取資料。 紅中 看了很多答案,都...