为了查询和存储指标数据使用哪种数据库/服务体系结构?

时间:2019-12-16 13:20:58

标签: database architecture analytics dashboard metrics

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

我有一个网络抓取工具,该工具应该每天运行。它将从多个可公开获得的政府数据中收集,整理和汇总有关本地企业的数据。此数据将发送到 Postgres数据库

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

我想这不是最明智的方法,因为它会用多个JOINSUMCOUNT等使数据库过载和减慢速度。我相信最好整夜编译这些指标并将其存储在某个地方?还是每小时一次?

我正在做一些研究,发现了这些“分析数据库”。那是我应该用的吗?这个similar question似乎已经解决了这个难题,尤其是@samxli's comment关于已接受的答案。

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

解决方案详细信息:

  • 具有CAPTCHA绕过功能的NodeJS Web抓取工具每天收集公共数据
  • 将来自多个来源的数据收集,汇总并保存到Postgres DB
  • 数据包含有关本地商家的公共信息-请参见下文
  • 仪表板显示历史数据(时间序列),指标和趋势

样本记录:

{
  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 },
  ...
}

样本指标:

  • 每个部门和活动在一段时间内活跃和不活跃的公司总数
  • 每个地区和活动随时间的预计税收收入
  • 每个市区的N个最常见的活动

1 个答案:

答案 0 :(得分:0)

我可以看到一些选择。我同意您的观点,即您希望将读写分开,以便分析不会影响系统性能。

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

或者,如果您想做更多的工作并得到可以大规模使用的东西,请更深入地分析分析数据库(OLAP)中的发现,并研究构建Star模式(https://en.wikipedia.org/wiki/Star_schema)。您可以放置​​一个ETL(提取,转换,加载)过程,以一种更易于汇总和使用的格式将数据从事务数据库中提取到分析数据库中。我已经进行了类似的工作,将成百上千个数据源(在30分钟内批量同步到数据仓库中)。如果您只有一个数据源,则这可能会显得过分。

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

如果您不采用弹性途径,还可以考虑使用某些BI(商业智能)工具(如PowerBI)来构建仪表板,而不是浪费时间。