如何在MongoDB中构建广告工具的数据模型

时间:2011-03-29 18:19:47

标签: ruby-on-rails database-design architecture mongodb advertising

我正在构建一个广告分析工具,假定这样的数据结构:

  • 帐户
  • 运动
  • 关键字
  • 转换

我有很多关于单个转化事件的信息,这些信息可以与每个广告系列,关键字,广告组等的费用数据联系起来。在SQL中,您可以将每个属性视为一种外键(文本 - 基于)特定帐户中的广告系列,关键字或广告,但效率低且速度慢。制作campaign_id,keyword_id等字段并填充它们并不是一个好主意,因为我希望分析能够近乎实时地提供。

使用MongoDB对此进行建模有什么好方法?

2 个答案:

答案 0 :(得分:2)

假设转换事件的数量非常大(每天数百万或更多),单独一个存储引擎(MongoDB或其他任何东西)将无法帮助您。您需要的是能够在数据上运行map-reduce作业以计算分析。您可以根据需要横向扩展群集,以实现近乎实时的性能。

我建议的免费/开源选项是Hadoop(可能是HBase和Hive)或Riak。 还有其他选择 - 我只是建议这两个选项,因为我在大规模的生产环境中有他们的个人经验。我们目前正在使用Hadoop为每天处理数十亿事件的分析系统提供支持。

如果你不是自己动手并且愿意并且愿意支付(很多!)那么请看GreenPlum和Vertica。

我很乐意分享有关潜在解决方案设计的更多信息 - 但我需要更多关于您要实现的目标的数据 - 规模,用例等。

答案 1 :(得分:0)

我不确定MongoDB是否是这样的正确选择,因为MongoDB实际上更多的是存储不太好(或更复杂)的文档,而不是像这样的分层记录。但是,如果您要使用MongoDB路线,则可以直接使用帐户,广告系列和关键字标签。在MongoDB中将这些抽象为无意义的密钥没有实质性的好处。您可以直接在MongoDB中索引这些字段。

我不知道你的卷会是什么以及影响你的技术选择的其他因素。但是,假设您的帐户,广告系列和关键字不会经常更改 ,您可以使用普通的旧RDBMS(SQL或Oracle等),使用查找表来执行此操作,其中外键是无意义的整数。如果您正在进行实时分析,您可以采用星型模式并将所有数字FK保留在基本事实表(转换)上,这样您就不会加入四个表链来获得整体情况,而是您做三个一跳连接。这将允许您在任何级别汇总只有一个连接。

相关问题