首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地在数据库中存储嵌套数据

问如何有效地在数据库中存储嵌套数据
EN

Software Engineering用户
提问于 2020-02-26 20:54:37
回答 1查看 344关注 0票数 -1

我们每天有200-300个现场项目,通过我们所有的现场项目从我们的供应商那里接收在线流量。我们将这些数据存储在两个不同的DB中(我知道这听起来很糟糕,但由于各种原因在设计时似乎很好):

  • - projects表中的MySQL项目信息
  • MongoDB collection中这些项目的流量数据。

现在,我们必须从这些数据中生成分析数据,这些数据存储在给定的日期范围内--收入、利润、顶级供应商、顶级项目(转换率最高)等等。这些数据必须每天存储在某个地方,以便我们可以按日期范围查询它。

唯一的问题是,一个项目流量在多个供应商之间分配。所以这种类型的数据是嵌套的,因为对于一个项目,我们可以有10个供应商的记录。

存储这类数据的最佳方法是什么,这样我就可以方便地查询它以达到表示的目的。

更新

“项目表”包含有关项目的详细信息,如-

Project_Code | Client Code | Sales Manager |Payout | Status | Country Code ...

流量集合包含关于特定项目流量的详细信息,如-

UUID | Project_Code | Vendor Code | Start Time | End Time | Conversion Status |...

当我们必须提取按项目划分的统计数据时,我们获取所有的项目,然后对相应的project_code的流量进行汇总,这样我们就可以得到

Project Code | Total Starts(sum of traffic for that project code) | Conversion (Sum of Traffic with conversion_status=1) | Incidence Length (Avg of Median(Endtime - Start time))

这就是我们到目前为止在数据库中得到的

现在我们想要的是每天挖掘这些数据,这样我们就可以计算

(给定日期范围,如Last 7 Days、Today、This Month)

第一视图。Project Code | Revenue Earned (Conversion * Payout) | Cost to Company (sum(Vendor Conversion * Vendor Cost)) | Profit (Revenue - Cost)

第二视图。First view but where Sales Manager = "John"

第三视图。Top n vendors | Top n Projects | ...

第四视图。Same as the Third View but where Sales Manager = "John"

到目前为止,我们正在使用Laravel,Mysql,MongoDB,Redis作为技术栈。

EN

回答 1

Software Engineering用户

发布于 2020-02-29 08:34:40

解决这些问题的标准方法是创建一个特殊的分析数据库(即OLAP数据库)。这样的数据库定期从在线生产数据库或其他数据源中填充,并为您打算应用的分析查询进行优化。

这种数据库的数据模型通常采用星型模式的形式,中间有一个事实表,周围有几个维度表。在您的示例中,事实表可以是“流量”表,具有属性“成本”和“收入”以及维度。

  • 产品
  • 供应商
  • 销售经理
  • 时间

当然,您需要找到一种方法,将成本和收入分解为这个事实表的粒度,并且您必须考虑您需要时间维度的粒度,但这是“留给读者的练习”。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/405806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档