gpt4 book ai didi

database-design - MongoDB 分析模式

转载 作者:可可西里 更新时间:2023-11-01 10:06:28 26 4
gpt4 key购买 nike

Mongo 新手,接受分析任务并有一个架构问题。

我来自 SQL 服务器,我有 4 个表...

stats_landing_table
-------------------
id
post_id
visit_date
country
browser
impressions

stats_geo_table
---------------
id
post_id
date
country
country_count

stats_browser_table
-------------------
id
post_id
date
browser
browser_count

stats_impressions_table
-----------------------
id
post_id
date
impression_count

有了登陆表——我每次都把所有数据都扔进去——没有更新,只有插入。在那里我有一个触发器,它查看其他表并进行适当的更新或插入,然后从登录表中删除条目。

因此,我需要 FAST 插入/更新,能够返回并显示基于整个或特定时间范围的帖子周围每个属性(国家/地区、浏览器、印象等)的报告。

对于 Mongo,归根结底是我应该嵌入还是拥有单独的文档,或者我猜是一个完全不同的架构。如果我嵌入,我想弄清楚如何更新浏览器表之类的东西,同时仍然检查国家和更新印象。听起来我需要为每件事单独更新(例如,这个访问者使用的是来自德国的 firefox,而这个是来自芬兰的 firefox - 不能在我看到的单个查询中做到这一点)。另一种选择是处理不同的文档,但这是同样的问题 - 我需要为每个集合进行更新 - 与 SQL Server 单次调用相比,网络流量很大。

我乐于接受任何有关如何设计此类允许快速性能更新/插入,同时仍允许报告的建议。

最佳答案

根据我对这种情况的了解,这三个表是汇总表,其中计算了日期、post_id 和给定指标(如果是浏览器或国家/地区)的唯一组合。

我会一起跳过插入表,因为您今天不保留它并或多或少地将它用作队列。

使用 MongoDB,写入操作将全部写入内存,因此速度非常快。它也可以异步完成(即发即忘式)。

我会为每个唯一的日期和 post_id 创建一个新文档。它将有两个数组,一个用于浏览器,一个用于国家,其中键是国家代码或浏览器,值是计数。该文档还会有一个展示次数字段。

每次访问都会更新一个文档,并且很容易查询。

更新将使用原子运算符“$inc”在服务器上以原子方式递增计数,因此不需要拉入数据来进行更新。传输的数据量非常小。

这是否回答了问题?

关于database-design - MongoDB 分析模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com