繁体   English   中英

使用 NodeJS、Postgres 显示摘要数据的最佳方法是什么?

[英]What is the best approach to display the summary data using NodeJS, Postgres?

我们正在使用 Node Js、Angular 和 Postgres 构建一个类似于销售管理系统的 web 应用程序。

对于给定的销售代理,我们需要在仪表板上显示各种信息,如个人详细信息、就业详细信息等以及如下所示的摘要数据:

总销售/销售尝试:4/10
物品 过去 1 周 过去两周 最近1个月 最近3个月
Model一个 2 次成功/4 次尝试 4 次成功/5 次尝试 5 次成功/6 次尝试 .....
Model 乙 1 次成功/4 次尝试 2 次成功/5 次尝试 3 次成功/6 次尝试 .....
服务1 0 次成功/4 次尝试 3 次成功/5 次尝试 3 次成功/6 次尝试 .....
服务2 1 次成功/4 次尝试 3 次成功/5 次尝试 5 次成功/6 次尝试 .....

我们在 Postgresql 中有一个典型的规范化数据库表,例如:

  1. 销售 - 所有销售
  2. model a - 产品销售 model a
  3. model b - 产品销售额 model b
  4. 服务 1 - 服务 1 的销售
  5. 服务 2 - 服务 2 的销售

最初,我们可能有几万条销售记录,在 3 到 6 个月的时间内可能会增长到数百万条,依此类推。 未来几个月可能还会显示其他此类摘要数据。 我们还将有一个单独的仪表板,我们必须在其中显示所有分析。 在这种情况下,在 UI 中以上述格式显示摘要数据的最佳方式是什么? 如果我们通过查询获取每个单独的项目并将其缓存在 redis 中是否可以? 我们有一个搜索代理的前一页。 对于前几个代理,我们可能可以查询和缓存。 查询可以使用单个查询或每个代理的一组查询来完成,并构建一个 JSON object 并将其缓存在 redis 中。

或者,使用存储过程或物化视图是否有意义?

我不确定上述方法的性能如何。 我们是否需要使用某种 NoSQL(Mongo 或 Cassandra)并使用某种批处理来计算并将数据从 Postgres 加载到 NoSQL?

我在谷歌上搜索了具体的例子、架构或设计方法,但找不到任何有用的东西。

任何有关包含详细信息或资源链接的特定解决方案的帮助都将非常有帮助。

根据您所写的内容,我可以假设两件事:

  1. 历史数据不会改变
  2. 周期不一样(1 周、2 周、1 个月、2 个月)

我认为这两种选择都是可行的:

  1. 物化视图
  2. 创建附加表,并创建一个每周填充它的脚本(使用特定时期的数据,因此您有一个汇总表)。

这两个选项都可以使用索引。

出于显而易见的原因,我不会重视带有“1 周前”等的列,而是重视一个时期或日期。 (1 周前,当一周过去时,变成两周前。)

我在这里看到的唯一区别是维护——物化视图可以有自动维护和手动维护。 还请查看物化视图维护,因为这可能是需要考虑的因素。

至于您关于存储过程或物化视图的问题 - 这是物化视图的作用:

1. Execute the SELECT query within the materialized view definition.
2. Cache the results in a new "virtual" table named sales_summary
3. Save the original query so it knows how to update the materialized view in the future.

因此,实质上,物化视图以某种方式“存储过程”,但利用了它缓存和存储视图的事实,因此它不需要每次都预先计算它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM