2010-04-20 61 views
1

我正在爲大型產品目錄(數百萬產品)構建用戶界面。帶有統計信息的大型產品目錄 - Sql Server的替代品?

我正在使用Sql Server,FreeText搜索和ASP.NET MVC。
表格被標準化和索引。大多數查詢不到一秒鐘就返回。

問題是這樣的。假設用戶通過關鍵字進行搜索。在搜索結果頁面我需要顯示/查詢:第一頁

  1. 顯示20個匹配產品(分頁,排序)
  2. 只的所有匹配的存儲分頁
  3. 名單配套產品的總計數產品
  4. 的品牌只有所有配套產品的顏色只有所有配套產品

每個查詢取

  • 列表列表約0.5秒到1秒。總共就是5秒鐘。

    我想讓整個頁面在1秒內加載。
    有幾種方法:

    1. 更多優化查詢。我已經在這個上花了很多時間,所以不能確定它可以進一步推動。

    2. 先加載產品,然後使用AJAX加載其餘信息。更像是一種解決方法。將需要修改用戶界面。

    3. 重新組織數據更加友好。已經彙集了很多領域。

    我查看了幾個類似的網站。例如。 zappos.com。他們不僅在1秒內顯示了我想要的信息,而且還包括統計信息(每個類別中的結果數量)。

    以下是關鍵字「白」 http://www.zappos.com/white

    如何像Zappos的網站,亞馬遜讓自己的結果,過濾器和統計出現幾乎立即搜索?

  • +0

    爲什麼你需要運行5個人的查詢?這似乎很容易在一個查詢中使用產品表中的幾個聯接。 – Aaronaught 2010-04-20 14:55:17

    +0

    你介意提供示例Sql(可能只是前3)嗎? – 2010-04-20 15:58:59

    回答

    0

    你可以嘗試用這些聚合的物化索引視圖替換你的aggergate查詢。這將預先計算所有聚合,並且會像選擇任何常規行數據一樣快。

    0

    .5秒對於合適的硬件來說太長。我同意Aaronaught,首先要做的是將它轉換爲單個SQL或可能存儲過程,以確保它只編譯一次。

    分析您的查詢,看看是否可以創建更好的索引(考慮覆蓋索引),微調現有索引,使用分區。

    確保您有適當的硬件配置 - 數據,日誌,臨時甚至索引文件應位於獨立的主軸上。確保你有足夠的內存和CPU。我希望你正在運行64位平臺。

    畢竟,如果您還需要更多 - 分析最常用的關鍵字併爲前10個關鍵字創建聚合結果表。

    金額亞馬遜 - 他們最有可能使用卓越的硬件,並利用CDN的優勢。此外,他們擁有數千臺服務器,並且不存在性能瓶頸 - 數據在多個數據中心內多次重複使用。作爲完全獨立的方法 - 您可能希望查看「內存」數據庫(如CACHE) - 這是您在數據庫端可以獲得的最快速度。

    1

    所以你特別問了「Zappos.com如何做到這一點」。這是我們的搜索團隊的答案。

    您的問題的另一種想法是使用搜索索引,如solr。基本上,這些工作的方式是將數據集加載到系統中,並執行大量索引。我的項目包括每個140k產品的200+數據點的產品目錄。平均回報時間少於20ms。

    我推薦的搜索索引系統是基於lucene的Solr。這兩個項目都是開源的並且可以免費使用。

    Solr非常適合您所描述的用例,因爲它實際上可以在一個查詢中完成所有這些操作。您可以使用構面(基本上按sql分組)返回所有適用結果的不同數據值列表。在關鍵字的情況下,它還允許您在一個查詢中跨多個字段進行搜索而不會降低性能。