繁体   English   中英

Solr架构设计:拟合时间序列数据

[英]Solr schema design: fitting time-series data

我试图在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(由于粒度减少,这些值将超过上表)

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

我将获得诸如“contentID = uuid123 and platform = mobile”之类的查询,给出1月15日至1月13日的“唯一性”和“contentID = uuid123和platform = mobile和softwareVersion = sw1.2”的总和,给出“总数”的总和1月15日至1月01日。

我在考虑简单的架构,文档就像(上面的第一个例子):

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

我希望能找到专家的建议

  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",
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM