2013-06-03 60 views
1

我目前正在使用node.js爲我當前的iPhone應用程序構建一個REST風格的Web服務。目前,該系統的工作原理如下:多個REST風格的Web服務調用與MySQL聯接

  • 客戶端發出請求的Node.js服務器,服務器執行適當的計算和MySQL查詢,並返回數據
  • 客戶的反應器處理響應,並更新UI

有一件事,我一直在想的就是差異(在性能和最佳實踐方面)作出多個API調用到我的服務器VS一對一呼叫在MySQL數據庫中執行多個語句組合,然後返回一個構造目的。

例如: 比方說我加載用戶配置文件在用戶界面中顯示。用戶具有個人資料圖片,基本信息和新聞提要項目。採用方案一,我會做如下:

  • 撥打的getUser請求到服務器,這將在DB這樣做的查詢:
    Select * from user join user_info on user.user_id=user_info.user_id left join user_profile_picture on user_profile_picture.user_id=user.user_id
    服務器將隨後在一次

選項2返回從每個表

  • 客戶等待服務器和更新所有的響應含有該信息構建的用戶對象將是:

    • 向服務器發出3個異步請求:
      • getUser
      • getUserInfo
      • getUserProfile
    • 每當任何請求被接收,用戶界面更新

    因此,考慮這兩個選項,我想知道這將提供更好的可擴展性。

    此刻,我想到的是使用選項2去這些原因:

    1. 每個異步請求的會比選擇一個查詢速度更快,因此顯示的東西給用戶更快
    2. 我也整合了Memecache,我覺得3個獨立的調用將更容易緩存特定的結果(例如不緩存用戶配置文件,但緩存用戶,user_info和user_profile_picture)。

    任何想法或經驗?

  • +0

    打交道,如果你正在建設一個移動應用程序,然後它總是更好更慢減少沒有http呼叫,所以我建議只做一個http呼叫並一次性獲取數據 –

    回答

    1

    我認爲這裏的關鍵問題是這些API調用是否總是一起進行。如果它們是,則設置單個端點並執行連接更有意義。但是,如果情況並非如此,那麼你應該保持獨立。

    現在,您可以做的當然是使用查詢語法,讓您指定特定端點是否應該爲您提供更多數據並將其與聯接結合使用。這確實需要更多的輸入衛生,但它可能是值得的,因爲你可以最小化請求,並仍然得到一個適應性系統。

    在服務器端,這是不可能的,無論你的兩種方法應該是noticably比其他的,除非你有幾千行的同時