寻找有关为点击跟踪系统设计此数据模型的最佳方法的一些见解。
目前,这就是我存储数据的方式:
{
"_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进行点击会更好吗?
提前谢谢!
答案 0 :(得分:0)
简短回答:这取决于。
从逻辑的角度来看,您必须考虑Click
和Lead
是不同的业务对象,还是不同状态下的同一业务对象。当它们是不同的BO时,将它们放入不同的集合中是一个理由。当它们是相同的BO时,它们将在同一个集合中。
从技术角度来看,您需要考虑查询的外观。
我(盲目地)假设你的Click
s大于Lead
s。我进一步假设(甚至更盲目地)你将对Lead
对象进行更多的查询(以及不同的查询)。因此,将Lead
文档放入单独的集合中会很有用,因为这会加快索引并大大加快任何非索引查询(无论如何,您可能必须这样做,因为数据挖掘不是' MongoDBs的一个强点)。
但另一方面,所有本机MongoDB操作只能在单个集合上执行。如果您需要一个同时需要Click
和Lead
的查询(比如计算哪个引荐来源具有哪个领先/点击率),您将需要执行多个查询并对应用程序执行数据挖掘-layer(但是你可能不得不在数据库之外进行大部分数据挖掘,因为数据挖掘不是MongoDBs强点之一)