首页 > 解决方案 > 使用什么数据库/服务架构来查询和存储指标数据?

问题描述

我是系统开发的新手,想知道是否有比我更有经验的人可以帮助我解决一些关于数据库、Web 服务和整体架构的问题。

我有一个应该每天运行的网络爬虫。它将从多个公开的政府数据中收集、清理和汇总有关本地企业的数据。该数据进入Postgres DB

然后,用户将拥有一个管理仪表板,他们可以在其中查看一些指标和趋势。我不知道这个仪表板是否应该在每次用户加载仪表板时查询数据库。

我想这不是最明智的方法,因为它会使数据库超载并减慢多个JOIN,SUMCOUNT。我相信最好在一夜之间编译这些指标并将其存储在某个地方?还是每小时?

我正在做一些研究,并遇到了这些“分析数据库”。那是我应该使用的吗?这个类似的问题似乎已经解决了这个难题,尤其是@samxli对已接受答案的评论。

我真的可以在这里使用一些方向指示。在生产中通常如何处理分析?非常感谢您!:竖起大拇指:

解决方案详情:

样本记录:

{
  trade_name: "ACME Inc.",
  legal_name: "Watchmen Hero Services Incorporated"
  active: true,
  foundation_date: "2018-11-23",
  sector: "services",
  main_activity: { id: 12318, name: "Law enforcement" },
  secondary_activities: [],
  address: {} // standard address object
  location: { lat: -23.2319, long: 42.1212 },
  ...
}

示例指标:

标签: databasearchitectureanalyticsdashboardmetrics

解决方案


我可以看到几个选项。我同意你的观点,在规模上,你希望将读取和写入分开,这样分析就不会影响你的系统性能。

您可能想研究复制 - https://www.brianstorti.com/replication/。您可以从“只读副本”读取数据并获得近乎实时的数据视图,但不会对写入性能造成巨大的破坏性影响。

或者,如果您想做更多的工作并获得可以在规模上运行良好的东西,请深入挖掘您在分析数据库 (OLAP) 上的发现并考虑构建星型模式 ( https://en.wikipedia.org/ wiki/Star_schema)。您可以实施 ETL(提取、转换、加载)流程,以更容易聚合和使用的格式将数据从事务数据库中提取到分析数据库中。我做过类似的事情,数百个数据源在 30 分钟内批量同步到数据仓库中。但是,如果您只有一个数据源,这可能有点过头了。

最后,如果您主要处理时间序列数据和指标,而不是 Postgress,还可以考虑使用 Elastic Stack ( https://hackernoon.com/elastic-stack-a-brief-introduction-794bc7ff7d4f )。

如果您不走 Elastic 路线,还可以考虑使用 PowerBI 等一些 BI(商业智能)工具来构建您的仪表板,而不是重新发明轮子。


推荐阅读