首页 > 解决方案 > 如何在 Google Bigtable 中聚合行

问题描述

我需要在 Google Bigtable 中保存错误日志。每个日志都属于一个代表任何类型服务的项目。需要支持以下查询。

获取给定开始日期和结束日期之间的所有唯一错误以及它们发生的次数顺序应该是 descending,以便最新的错误排在最前面。例如,有三个错误。其中两个是相似的,只是发生在不同的时间。相应的查询应该返回两个错误,而其中一个错误的计数为 2 表示他的错误发生了两次。

每个错误都有一个指纹,它是错误消息和堆栈跟踪的哈希值。

备择方案:

我现在想知道如何设计行键来执行上述查询。

a) 使用项目 ID 和指纹。

reversed_projectID#fingerprint

如果发生新错误,它将检查是否已经存在类似错误并在适当时增加其计数。否则,它会创建一个计数为 1 的新行。另一方面,我看不到如何提供降序。

b) 将每个错误存储在单独的行中。

reversed_projectID#reversed_timestamp

这将解决降序问题,但不会聚合类似的错误。例如,如果有人想要查看给定时间范围内的所有唯一错误,并且该范围包含例如四个唯一错误但每个错误发生 50.000 次,我需要对 200.000 行执行行扫描并将它们聚合到服务器。

有人对可能的解决方案有想法吗?非常感谢。

标签: databasegoogle-cloud-platformgoogle-cloud-bigtablebigtable

解决方案


您可以查看此文档,其中讨论了 Cloud Error Reporting 中的日志条目格式,并带有JSON 表示的示例。这将帮助您使用 MutateRow API 请求构建用于写入 BigTable的数据。如果您以后希望在新创建的数据库上利用 BigQuery 的功能,可以参考此文档


推荐阅读