MongoDB 分析模式
问题:MongoDB 分析模式
Mongo 新手,承担分析任务并有一个架构问题。
我来自 SQL Server,我有 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”在服务器上原子地增加计数,因此不需要拉入数据来进行更新。传输的数据量非常小。
这能回答问题吗?
更多推荐
所有评论(0)