首頁  >  問答  >  主體

java - 怎麼優化介面回傳大體量資料?

需求描述:

外圍平台調用接口根據手機號查詢用戶的歌單推薦信息,每個用戶會有一千條左右的推薦信息,每條推薦信息包括了,歌曲ID、歌曲名稱、版權ID、試聽位址欄位

我需要關聯多張表查詢,每次查詢時間大概4s左右,查詢出來後還需要組裝數據,然後才回傳介面。

回傳格式是json。這樣的話介面回傳會比較慢。

想過提前將資料放redis集群,但是後來否定了,因為用戶量大概是500多萬,每個用戶的推薦資訊大小大概200kb,存redis的話會耗費大量的內存,所以否定了。但想不到其它給好的處理方法,請各位大神幫忙看看這樣一個需求有什麼好的處理建議嗎?感謝!

世界只因有你世界只因有你2713 天前907

全部回覆(4)我來回復

  • 我想大声告诉你

    我想大声告诉你2017-05-17 10:02:33

    瓶頸出在查詢很多張表需要4秒上,這裡面的邏輯有可以最佳化的點嗎?如果沒有那麼這4秒必須花費,其他的資料傳輸格式,網路通訊時間再優化也無法小於4秒了。
    要么在客戶端在某個用戶無感知的情況下發送推薦請求,要么優化查詢邏輯。

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-17 10:02:33

    你鍊錶查詢,把你的sql貼出來,另外為什麼不分開查詢呢?估計你耗時在SQ

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-17 10:02:33

    1.一次返回一千條?一次50條會不會快點呢?多次分頁請求呢?
    2.覺得直接把快取方案否了不妥,500多w的用戶,並不都是活躍用戶,估算出活躍用戶的量的redis可以接受不?
    3

    回覆
    0
  • 某草草

    某草草2017-05-17 10:02:33

    在【建議資訊】上加入ID屬性,保存在redis,這個量應該不會大。

    每個使用者推薦的資訊也存在redis上,但是只保存1000個【推薦資訊】的ID。

    這樣的話就不會造成每個用戶的推薦資訊有200kb了。

    回覆
    0
  • 取消回覆