3

设想:

10.000.000 条记录/天

记录:访客、访问日期、集群(我们在哪里看到)、元数据

我们想通过这些信息知道什么:

  1. 给定日期范围内一个或多个集群上的唯一访问者。
  2. 每日独立访客
  3. 对给定范围(平台、浏览器等)的元数据进行分组

为了轻松查询此信息,我坚持使用的模型是:

{
   VisitorId:1, 
ClusterVisit: [
                {clusterId:1, dates:[date1, date2]},
                {clusterId:2, dates:[date1, date3]}
              ]
}

指数:

  1. 按访客 ID(以确保唯一性)
  2. 通过 ClusterVisit.ClusterId-ClusterVisit.dates(用于搜索)
  3. 通过 IdUser-ClusterVisit.IdCluster(用于更新)

我还必须将集群组拆分为不同的集合,以便更有效地访问数据。

导入:首先我们搜索 VisitorId - ClusterId 的组合,然后我们 addToSet 日期。

第二:如果 first 不匹配,我们插入:

    $addToSet: {VisitorId:1, 
        ClusterVisit: [{clusterId:1, dates:[date1]}]
    }

如果 clusterId 不存在或 VisitorId 不存在,我会介绍第一次和第二次导入。

问题:当集合增长时,更新/插入/更新完全低效(几乎不可能),我猜是因为添加新日期时文档大小变大。难以维护(主要是未确定的日期)

我有一个超过 50.000.000 个的集合,我不能再增长了。它仅更新 100 ~ 记录/秒。

我认为我使用的模型对于这种信息量来说并不是最好的。在我搞乱分片之前,你认为最好获得更多 upsert/sec 并快速查询信息,这将花费更多时间,而我学习并对此充满信心。

我在 AWS RAID 10 上有一个带有 10 个磁盘的 x1.large 实例

4

1 回答 1

2

数组在大型集合上很昂贵:mapreduce、聚合......

尝试 .explain(): MongoDB 'count()' 非常慢。我们如何改进/解决它?

为索引添加显式提示: 尽管设置了索引,但简单的 MongoDB 查询非常慢

A full heap?: node-mongodb-native 的插入性能

收集的内存空间结束: 如何提高 MongoDB 中 update() 和 save() 的性能?

特殊读聚类: http: //www.colinhowe.co.uk/2011/02/23/mongodb-performance-for-data-bigger-than-memor/

全局写锁?: mongodb性能不佳

慢日志性能跟踪: 跟踪 MongoDB 性能?

轮换日志: 将输出记录到输出文件会影响 mongoDB 性能吗?

使用分析器: http ://www.mongodb.org/display/DOCS/Database+Profiler

将一些集合缓存移动到 RAM: MongoDB 将文档预加载到 RAM 以获得更好的性能

关于集合分配大小的一些想法: MongoDB 数据模式性能

使用单独的集合: 数据结构不断增长的 MongoDB 性能

单个查询只能使用一个索引(最好是复合的): 这个mongodb查询为什么这么慢?

缺少键?: MongoDB 查询缓慢:您能解释一下原因吗?

Maybe shards: MongoDB 在聚合查询上的表现

提高性能 stackoverflow 链接: https ://stackoverflow.com/a/7635093/602018

进一步分片副本教育的一个好点是: https ://education.10gen.com/courses

于 2012-11-20T20:29:18.383 回答