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



我正在尝试将以下数据放入Solr中,以支持灵活的查询,并希望获得相同的输入。我有关于用户的数据说:

contentID (assume uuid), 
platform (eg. website, mobile etc), 
softwareVersion (eg. sw1.1, sw2.5, ..etc),
regionId (eg. us144, uk123, etc..)
....

以及其他很少的此类领域。这些数据是部分预聚合的(读取Hadoop作业):因此,让我们假设"contentID=uuid123 and platform=mobile and softwareVersion=sw1.2 and regionId=ANY"的数据格式为:

timestamp  pre-aggregated data [ uniques, total]
Jan 15    [ 12, 4]
Jan 14    [ 4, 3]
Jan 13    [ 8, 7]
...        ...

然后我还有一些不太精细的数据,比如"contentID=uuid123 And platform=mobile And softwareVersion=ANY And regionId=ANY(由于粒度降低,这些值将大于上表)

timestamp : pre-aggregated data [uniques, total]
Jan 15    [ 100, 40]
Jan 14    [ 45, 30]
...           ...

我会得到像"contentID=uuid123 and platform=mobile"这样的查询,为1月15日至1月13日给出"uniques"的总和,或者为"contentID=uuid123 and platform=mobile-and-softwareVersion=sw1.2",为1日至1日给出"total"的总和。

我想的是一个简单的模式,文档将是这样的(上面的第一个例子):

{
"contentID": "uuid12349789",
"platform" : "mobile",
"softwareVersion": "sw1.2",
"regionId": "ANY",
"ts" : "2017-01-15T01:01:21Z",
"unique": 12,
"total": 4
}

上面的第二个例子:

{
"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的每个组合存储一个新文档。现在,如果我们在这个文档中加入另一个字段,组合的数量会呈指数级增长。我已经有超过十亿个这样的组合行了。

如果

  1. 对于不同的"ts",多个这样的字段可以放在同一文档中,这样就可以对其进行范围查询
  2. 时间范围(ts)可以和列表(?)放在同一文档中(以减少行数)。我知道多值字段不支持复杂的数据类型,但如果可以对数据/模式做任何其他事情的话,可以减少查询时间和行数

这些行的数量非常大,肯定超过10亿(如果我们采用我建议的模式)。您对此建议使用什么模式来满足查询要求?

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

您正在尝试存储所有可能的属性值组合的查询时间结果。重复的数据太多了。相反,您只需将每个观测值和属性作为单个数据点存储一次。因此,如果你有"n"个观测值,如果你添加一个额外的属性,它会增加,而不是指数增长。如果您需要某个属性组合的数据,则可以在查询时对其进行筛选/聚合。

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

最新更新