为跟踪系统构建MongoDb集合

时间:2016-02-13 15:37:42

标签: mongodb data-structures

我需要构建一个系统来跟踪我们所有网站中的用户 每个进入我们网站的新用户都将获得一个存储在cookie中的ID 对于网站中的每项活动,我们都希望保存相关数据 例如,当用户注册时,我们将公开api以将活动添加到数据库。之后,我们将对数据进行后端报告 我们还没有确定技术,但我们假设我们将选择nodejs + express + mongoose。
我们相信第一个系列(见下文)将在一个月内拥有约600万行。其他收藏可能有一半。

我不知道以下数据结构是否在mongodb中运行良好。

SessionCollection

  • Id mongo ObjectId - 生成后,最终将成为Cookie Id。
  • Referer - 字符串(完整查询字符串uri的长度)
  • LandingUrl - 字符串(完整查询字符串uri的长度)
  • DateTime
  • Params - KeyValue数据,来自LandingUrl的解析数据,假设是嵌套的json树。
    如果LandingUrlhttp://s.com?a=1&b=2&c=3,那么参数将是:
    params : {a:'1',b:'2',c:'3'}

ActivityCollection

  • Id mongo ObjectId
  • SessionId - " forein key"到SessionCollection
  • ActivityType - 简短的自由字符串
  • DateTime
  • ActivityData - 免费的KeyValue数据(类似于上面的解释)。

当我说所有我的意思是全部时,两个集合都可以在所有领域中搜索。

  1. 这对mongo来说是个好结构吗?
  2. 你认识到一个糟糕的模式吗?
  3. 你有什么建议让它变得更好吗?
  4. 可以在mongodb中索引完整的网址吗?
  5. 感谢

1 个答案:

答案 0 :(得分:0)

我将回答#4,因为这是一个有趣的问题而没有明显的答案。

  

可以在mongodb中索引完整的网址吗?

答案是大部分时间,但不是所有时间。

说明:由于MongoDB对索引的长度有限制(1024字节),因此无法始终在MongoDB中索引URL。如果长度超过那个长度,那么它将不会被索引或者可能会出错(取决于版本和大小写)。完整的URL可能会超出此限制(因为几乎所有浏览器都支持至少2000个字符)。如果你有这么长的URL的可能性,解决方案是使用散列方法的索引。

有关MondoDB限制及其处理> 1024字节索引的更多信息(行为已从2.6及以后发生重大变化),请参阅https://docs.mongodb.org/manual/reference/limits/

对于网址长度,请参阅What is the maximum length of a URL in different browsers?