moving-scale

在产品中,您应该了解有关功能使用情况的深入信息。这样,您也应该有兴趣知道特定功能何时被最后触及。在本文中,我们将解决在网站的不同实体/页面上获取点击计数的问题,以了解特定页面上次触摸时间。

为了解决这个问题,想到了两个主要解决方案:

  1. Cassandra 计数器表– Cassandra 支持计数器表,但无法将时间戳列(不能是主列)与计数器表混合。并且计数器表只允许使用主键列和计数器列。因此,有了这个限制,我们不能继续Cassandra计数器表。

  2. 弹性搜索– 弹性搜索中没有对计数器表的内置支持,但我们可以利用其脚本功能来实现它们。

您也可以喜欢:数据建模:计数器表。

解决 方案

假设用户刚刚在我们的网站上看到一个视频的唯一 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 天的实体”。

进一步阅读

Comments are closed.