database - 使用什么数据库/服务架构来查询和存储指标数据?
问题描述
我是系统开发的新手,想知道是否有比我更有经验的人可以帮助我解决一些关于数据库、Web 服务和整体架构的问题。
我有一个应该每天运行的网络爬虫。它将从多个公开的政府数据中收集、清理和汇总有关本地企业的数据。该数据进入Postgres DB。
然后,用户将拥有一个管理仪表板,他们可以在其中查看一些指标和趋势。我不知道这个仪表板是否应该在每次用户加载仪表板时查询数据库。
我想这不是最明智的方法,因为它会使数据库超载并减慢多个JOIN
,SUM
等COUNT
。我相信最好在一夜之间编译这些指标并将其存储在某个地方?还是每小时?
我正在做一些研究,并遇到了这些“分析数据库”。那是我应该使用的吗?这个类似的问题似乎已经解决了这个难题,尤其是@samxli对已接受答案的评论。
我真的可以在这里使用一些方向指示。在生产中通常如何处理分析?非常感谢您!:竖起大拇指:
解决方案详情:
- 绕过 CAPTCHA 的 NodeJS 网络爬虫每天收集公共数据
- 来自多个来源的数据被清理、聚合并保存到 Postgres 数据库
- 数据包含有关本地企业的公共信息 -见下文
- 仪表板显示历史数据(时间序列)、指标和趋势
样本记录:
{
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 个最常见的活动
解决方案
我可以看到几个选项。我同意你的观点,在规模上,你希望将读取和写入分开,这样分析就不会影响你的系统性能。
您可能想研究复制 - 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(商业智能)工具来构建您的仪表板,而不是重新发明轮子。
推荐阅读
- javascript - Code Runner 无法处理我保存的文件
- android - RecyclerView 仅显示 JsonArray 中的第一项
- c# - 不可变列表
检查并删除 - php - $_SESSION 变量被覆盖
- reactjs - 如果缺少道具我应该使用备忘录吗?
- raspberry-pi3 - Rasperry PI 3+ 上的 InfluxDB 1.7.x 高 CPU 使用率
- python - 基于python中的字符串值标记数据
- c# - 使用 Prism/MVVM 实例化新的 View/ViewModel 实例
- linq - EF Core 2.2 在加入多列时意外生成 SQL
- c++ - 为什么&符号运算符仅有时用于在 C++ 中分配指针?