3

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 单次调用相比,这是很多网络流量。

我愿意接受任何关于如何设计这样的东西的建议,以允许快速的性能更新/插入,同时仍然允许报告。

4

1 回答 1

3

根据我对这种情况的了解,这三个表是汇总表,其中在浏览器或国家/地区的情况下,天、post_id 和给定指标的唯一组合被计算在内。

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

使用 MongoDB,写入将全部写入内存,因此速度非常快。它也可以异步完成(触发并忘记它的风格)。

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

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

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

这能回答问题吗?

于 2012-04-30T15:45:13.293 回答