2012-07-26 46 views
0

我是ravendb的新手,並嘗試瞭解它是否能爲我工作的公司完成工作。RavenDB方面需要很長的查詢時間

我更新了10K記錄到服務器的數據。 每個數據看起來像這樣:

{ 
    "ModelID": 371300, 
    "Name": "6310I", 
    "Image": "0/7/4/9/28599470c", 
    "MinPrice": 200.0, 
    "MaxPrice": 400.0, 
    "StoreAmounts": 4, 
    "AuctionAmounts": 0, 
    "Popolarity": 16, 
    "ViewScore": 0.0, 
    "ReviewAmount": 4, 
    "ReviewScore": 40, 
    "Cat": "E-Cellphone", 
    "CatID": 1100, 
    "IsModel": true, 
    "ParamsList": [ 
    { 
     "ModelID": 371300, 
     "Pid": 188396, 
     "IntVal": 188402, 
     "Param": "Nokia", 
     "Name": "Manufacturer", 
     "Unit": "", 
     "UnitDir": "left", 
     "PrOrder": 0, 
     "IsModelPage": true 
    }, 
    { 
     "ModelID": 371305, 
     "Pid": 398331, 
     "IntVal": 1559552, 
     "Param": "1.6", 
     "Name": "Screen size", 
     "Unit": "inch", 
     "UnitDir": "left", 
     "PrOrder": 1, 
     "IsModelPage": false 
},..... 

其中ParamsList是單個產品的所有屬性的數組。

from doc in docs.FastModels 
from docParamsListItem in ((IEnumerable<dynamic>)doc.ParamsList).DefaultIfEmpty() 
select new { Param = docParamsListItem.IntVal, Cat = doc.Cat } 

var facetSetupDoc = new FacetSetup 
     { 
      Id = "facets/Params2Facets", 
      Facets = new List<Facet> { new Facet { Name = "Param" } } 
     }; 

一個面和搜索這樣

var facetResults = session.Query<FastModel>("ParamNewIndex") 
       .Where(x => x.Cat == "e-cellphone") 
       .ToFacets("facets/Params2Facets"); 

花費超過一秒鐘來查詢,那就是:

建立的索引之後只有10K的數據。我們公司在數據庫中擁有超過1M個產品。

我做錯了什麼?

回答

1

爲了生成方面,您必須檢查每個的每個值&。如果你有很多,那可能需要一些時間。 一般來說,你不應該有很多方面,因爲這沒有意義,它不會幫助用戶。 對於整數,通常使用範圍,而不是實際值。 例如,價格在一定範圍內。 您只使用該領域的東西,如製造商或MegaPixels計數,你有批號或項目(大約一兩個)

你沒有提到你正在使用哪個版本,但我們做了一些主要最近有改進。

+0

非常感謝,讓我說我想讓每個類別的產品類別數量的所有制造商:三星(30),蘋果(5)....,其中有很多(數百)。有沒有更好的方法來做到這一點? – 2012-07-29 06:39:22