RavenDB方面需要很长的查询时间

时间:2012-07-26 09:59:24

标签: 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的数据。我们公司在DB中拥有超过1M种产品。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

为了生成方面,你必须检查每个方面。 docParamsListItem.IntVal的每个值。如果你有很多,那可能需要一些时间。 一般来说,你不应该有很多方面,因为这没有任何意义,它对用户没有帮助。 对于整数,通常使用范围而不是实际值。 例如,价格在一定范围内。 您只使用制造商或MegaPixels计数等字段,其中您有批号或项目(大约一两个)

你没有提到你正在使用哪种版本,但我们最近在那里做了一些重大改进。