在产品中,您应该了解有关功能使用情况的深入信息。这样,您也应该有兴趣知道特定功能何时被最后触及。在本文中,我们将解决在网站的不同实体/页面上获取点击计数的问题,以了解特定页面上次触摸时间。
为了解决这个问题,想到了两个主要解决方案:
-
Cassandra 计数器表– Cassandra 支持计数器表,但无法将时间戳列(不能是主列)与计数器表混合。并且计数器表只允许使用主键列和计数器列。因此,有了这个限制,我们不能继续Cassandra计数器表。
-
弹性搜索– 弹性搜索中没有对计数器表的内置支持,但我们可以利用其脚本功能来实现它们。
您也可以喜欢:数据建模:计数器表。
解决 方案
假设用户刚刚在我们的网站上看到一个视频的唯一 ID 为88d19b07-86d2-471d-be33-ed10eef5d38e。
POST counter/count/VIDEO_VIEW_88d19b07-86d2-471d-be33-ed10eef5d38e/_update
{
"script": {
"source": "ctx._source.counter += params.count;ctx._source.recorded_timestamp = params.recorded_timestamp",
"lang": "painless",
"params": {
"count": 1,
"recorded_timestamp": "2019-11-19T22:15:30Z"
}
},
"upsert": {
"entity": "VIDEO",
"counter": 1,
"action":"VIEW",
"uuid":"88d19b07-86d2-471d-be33-ed10eef5d38e",
"recorded_timestamp": "2019-11-19T22:15:30Z"
}
}
我们有一个弹性搜索索引,索引名称为”计数器”,并键入”计数”。利用此信息,我们尝试在此示例中使用 ID ${实体}$${action}$_UUID] (88d19b07-86d2-471d-be33-ed10eef5d38eee)为文档编制索引。
如果首次观看此视频,将执行给定”upsert”键的块,并将以计数器值 1 启动文档。
下一次,每当用户观看此视频时,将触发相同的索引代码,并且将找到具有给定 ID 的文档,该文档具有索引名称”计数器”和键入”计数”。因此,在脚本之后,计数器将增加 1(在参数键下给出),并且更新日期将更新为在参数键下提供的数据。其他键将保持不变。
现在我有数据告诉我:
-
哪个实体被广泛使用,哪个实体的特定项被广泛使用。在这种情况下,最常观看的特定视频。
-
哪个实体未使用操作
-
只需在 Elasticsearch 中查询”给我所有
recorded_timestamp
超过 30 天的实体”。
-