MongoDB性能问题以及大型数据集的优化和最佳实践

时间:2017-12-14 16:23:48

标签: mongodb indexing data-modeling datamodel nosql-aggregation

我的mongodb系列中有大约300列。 这个集合将包含大约1000万条+记录。 任何人都可以建议我应该遵循的任何可能的优化和良好做法。

MongoDB 3.4版 文件结构:

{
    "_id" : ObjectId("2343290422555520a09c154"),
    "10_second_video_views" : "0",
    "30_second_video_views" : "0",
    "3_second_video_views" : "0",
    "account_id" : "12345679898",
    "account_name" : "Test FB ad Account",
    "ad_id" : "632234424",
    "ad_name" : "Music_Mobile_Men_20-50_101",
    "adset_id" : "67453452",
    "adset_name" : "CA_Lookalike (US 1%) - Music_Mobile_Men_121715",
    "datetime" : ISODate("2017-12-14T19:52:50.000+05:00")
    .....
    ..... 
    around 300 columns
}

我必须根据日期范围,广告系列,广告和广告执行查询。我必须使用聚合管道执行聚合操作。

我已经创建了一个测试用例,其中在集合中插入了10百万条记录,然后尝试执行各种查询,但遗憾的是它们无法正常运行并继续运行。

我试过的查询:

  /*------1-------*/
    db.ads_insightsV2.aggregate([
        {
            $match: {
                 "ad_id" : "6033051510015"
             }
        },
        {
            $group:{
                _id: "ad_id",
                ids: {$push: "$ad_name"}
            }
        }
    ]);


    /*------2-------*/    
    db.ads_insights.aggregate([
        {
            $project:{
                _id: 0,
                Year: {$year: "$datetime"},
                Month: {$month: "$datetime"},
                Day: {$dayOfMonth: "$datetime"},
                datetime: 1
            }
        },
        {
            $match: {
                "Day" : 15
            }
        },
        {
            $group: {
                _id: "$Day",
                count: {$sum: 1}
            }
        }, 
        {
            $sort: {
                _id: 1
            }
        }
    ]);


    /*------3-------*/
    db.ads_insights.aggregate([
        {
            $match: {
                 "ad_id" : "6033051510015",
                 "datetime" : {$lte: new Date("2017-12-19T17:30:32.000+05:00")}
             }
        },
        {
            $group:{
                _id: "ad_id",
                ids: {$push: "$ad_name"}
            }
        }
    ]);

我还尝试使用

在我的datetime列上创建索引
db.ads_insights.createIndex( { datetime: 1 } );

0 个答案:

没有答案