database - 如何在 Google Bigtable 中聚合行
问题描述
我需要在 Google Bigtable 中保存错误日志。每个日志都属于一个代表任何类型服务的项目。需要支持以下查询。
获取给定开始日期和结束日期之间的所有唯一错误以及它们发生的次数。顺序应该是 descending,以便最新的错误排在最前面。例如,有三个错误。其中两个是相似的,只是发生在不同的时间。相应的查询应该返回两个错误,而其中一个错误的计数为 2 表示他的错误发生了两次。
每个错误都有一个指纹,它是错误消息和堆栈跟踪的哈希值。
备择方案:
我现在想知道如何设计行键来执行上述查询。
a) 使用项目 ID 和指纹。
reversed_projectID#fingerprint
如果发生新错误,它将检查是否已经存在类似错误并在适当时增加其计数。否则,它会创建一个计数为 1 的新行。另一方面,我看不到如何提供降序。
b) 将每个错误存储在单独的行中。
reversed_projectID#reversed_timestamp
这将解决降序问题,但不会聚合类似的错误。例如,如果有人想要查看给定时间范围内的所有唯一错误,并且该范围包含例如四个唯一错误但每个错误发生 50.000 次,我需要对 200.000 行执行行扫描并将它们聚合到服务器。
有人对可能的解决方案有想法吗?非常感谢。
解决方案
您可以查看此文档,其中讨论了 Cloud Error Reporting 中的日志条目格式,并带有JSON 表示的示例。这将帮助您使用 MutateRow API 请求构建用于写入 BigTable的数据。如果您以后希望在新创建的数据库上利用 BigQuery 的功能,可以参考此文档。
推荐阅读
- java - 使用 OAuth2 实现 Spring RESTful Web 服务 - 将 id 令牌保存为 id 会话
- python - 带有 Urllib 的“[WinError 6] 句柄无效”
- git - 在设置中更改行结束后强制推送
- header-files - Valac 缺少生成的标头
- javascript - 如何提高性能
- protractor - 如何为功能中的每个场景关闭和打开浏览器 - 量角器和 cucumberjs
- azure - 策略 rewrite-uri 在 Azure APIM 中附加上下文变量
- java - 如何通过纯 Java 类读取 OSGI 配置
- javascript - 如何正确地将 ES6 模块函数导出为库以在节点应用程序中使用?
- python - 如何使用 matplotlib/seaborn 获得亮度保持灰度的调色板