数据模型设计辅助

时间:2014-03-17 09:32:33

标签: mongodb

寻找有关为点击跟踪系统设计此数据模型的最佳方法的一些见解。

目前,这就是我存储数据的方式:

{
    "_id": "1a5be787-91bd-4ebc-99d1-fad750430da5",
    "time": {
        "$date": "2014-03-14T17:22:38.833Z"
    },
    "ip": "127.0.0.1",
    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36",
    "referrer": null,
    "keyword": "test",
    "brand": "testing",
    "source": "google"
}

我通过_id传递了他们的点击,因此我将其传递到他们重定向到的页面。当用户成功完成表格(领导)时,我想知道这一点,那么最好的方法是什么?我应该有一个单独的集合,还是应该更新文档以存储这样的数据:

 {
        "_id": "1a5be787-91bd-4ebc-99d1-fad750430da5",
        "time": {
            "$date": "2014-03-14T17:22:38.833Z"
        },
        "ip": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36",
        "referrer": null,
        "keyword": "test",
        "brand": "testing",
        "source": "google",
        "lead": {
            success: 1,
            name: 'john',
            email: 'email@email.com'
        }


    }

或者将数据保存在新集合中并引用_id进行点击会更好吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

简短回答:这取决于。

从逻辑的角度来看,您必须考虑ClickLead是不同的业务对象,还是不同状态下的同一业务对象。当它们是不同的BO时,将它们放入不同的集合中是一个理由。当它们是相同的BO时,它们将在同一个集合中。

从技术角度来看,您需要考虑查询的外观。

我(盲目地)假设你的Click s大于Lead s。我进一步假设(甚至更盲目地)你将对Lead对象进行更多的查询(以及不同的查询)。因此,将Lead文档放入单独的集合中会很有用,因为这会加快索引并大大加快任何非索引查询(无论如何,您可能必须这样做,因为数据挖掘不是' MongoDBs的一个强点)。

但另一方面,所有本机MongoDB操作只能在单个集合上执行。如果您需要一个同时需要ClickLead的查询(比如计算哪个引荐来源具有哪个领先/点击率),您将需要执行多个查询并对应用程序执行数据挖掘-layer(但是你可能不得不在数据库之外进行大部分数据挖掘,因为数据挖掘不是MongoDBs强点之一)