Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr模式设计:拟合时间序列数据_Solr - Fatal编程技术网

Solr模式设计:拟合时间序列数据

Solr模式设计:拟合时间序列数据,solr,Solr,我正在尝试在Solr中拟合以下数据,以支持灵活的查询,并希望在相同的基础上获得您的输入。我有关于用户的数据,比如: contentID (assume uuid), platform (eg. website, mobile etc), softwareVersion (eg. sw1.1, sw2.5, ..etc), regionId (eg. us144, uk123, etc..) .... 几乎没有其他类似的领域。这些数据是部分预聚合的(读取Hadoop作业):因此,让我们假设“

我正在尝试在Solr中拟合以下数据,以支持灵活的查询,并希望在相同的基础上获得您的输入。我有关于用户的数据,比如:

contentID (assume uuid), 
platform (eg. website, mobile etc), 
softwareVersion (eg. sw1.1, sw2.5, ..etc),
regionId (eg. us144, uk123, etc..)
....
几乎没有其他类似的领域。这些数据是部分预聚合的(读取Hadoop作业):因此,让我们假设“contentID=uuid123和platform=mobile和softwareVersion=sw1.2和regionId=ANY”的数据格式为:

timestamp  pre-aggregated data [ uniques, total]
 Jan 15    [ 12, 4]
 Jan 14    [ 4, 3]
 Jan 13    [ 8, 7]
 ...        ...
此外,我还有一些粒度较小的数据,比如“contentID=uuid123,platform=mobile,softwareVersion=ANY,regionId=ANY”(由于粒度减小,这些值将大于上表)

我将得到类似“contentID=uuid123和platform=mobile”的查询,给出Jan15-Jan13的“uniques”之和,或者“contentID=uuid123和platform=mobile,softwareVersion=sw1.2”的查询,给出Jan15-Jan01的“total”之和

我想到了一个简单的模式,其中的文档如下(上面的第一个示例):

上面的第二个例子:

{
  "contentID": "uuid12349789",
  "platform" : "mobile",
  "softwareVersion": "ANY",
  "regionId": "ANY",
  "ts" : "2017-01-15T01:01:21Z",
  "unique": 100,
  "total": 40
}
可能的优化:

{
  "contentID": "uuid12349789",
  "platform.mobile.softwareVersion.sw1.2.region.us12" : {
      "unique": 12,
      "total": 4
  },
 "platform.mobile.softwareVersion.sw1.2.region.ANY" : {
      "unique": 100,
      "total": 40
  },
  "ts" : "2017-01-15T01:01:21Z"
  }
挑战:这类行的数量非常大,并且会随着每个新字段呈指数增长——例如,如果我使用上面建议的模式,我将为contentID、platform、softwareVersion、regionId的每个组合存储一个新文档。现在,如果我们在该文档中加入另一个字段,则组合的数量将呈指数增长我已经有超过十亿行这样的组合了

如果你愿意,我希望能找到专家的建议

  • 对于不同的“T”,多个这样的字段可以放在同一个文档中,这样就可以对其进行范围查询
  • 时间范围(ts)可以和列表(?)放在同一个文档中(以减少行数)。我知道多值字段不支持复杂的数据类型,但如果可以对数据/模式执行任何其他操作,以减少查询时间和行数
  • 这些行的数量非常大,肯定超过10亿行(如果我们使用我建议的模式的话)。您会为此建议什么模式来满足查询要求


    仅供参考:所有查询将与字段完全匹配(无部分或标记化),因此不需要对字段进行分析。而且几乎所有查询都是范围查询。

    您试图存储所有可能的属性值组合的查询时间结果。这只是太多重复数据。相反,您只需将每个观察值和属性存储为单个数据点一次。因此,如果您有“n”个观察值,并且如果你添加一个额外的属性,它将以相加的方式增长,而不是以指数的方式增长。如果你需要某个属性组合的数据,你可以在查询时过滤/聚合它们

    {
      "contentID": "uuid12349789",
      "ts" : "2017-01-15T01:01:21Z",
      "observation": 10001,
    
      "attr-platform" : "mobile",
      "attr-softwareVersion": "sw1.2",
      "attr-regionId": "US",
    }
    

    您正在尝试存储所有可能的属性值组合的查询时结果。这只是太多重复数据。相反,您只需将每个观察值和属性作为单个数据点存储一次。因此,如果您有“n”个观察值,并且添加了一个额外的属性,它将以相加方式增长,而不是以指数方式增长。如果您对于某些属性组合所需的数据,您可以在查询时对其进行过滤/聚合

    {
      "contentID": "uuid12349789",
      "ts" : "2017-01-15T01:01:21Z",
      "observation": 10001,
    
      "attr-platform" : "mobile",
      "attr-softwareVersion": "sw1.2",
      "attr-regionId": "US",
    }
    
    {
      "contentID": "uuid12349789",
      "ts" : "2017-01-15T01:01:21Z",
      "observation": 10001,
    
      "attr-platform" : "mobile",
      "attr-softwareVersion": "sw1.2",
      "attr-regionId": "US",
    }