MongoDb数据库建模

MongoDb数据库建模,mongodb,Mongodb,我对1对象的数据大小有问题。我不知道我的数据模型是真的吗? 情况如下: 我有25个服务器,200个服务器计数器和1440分钟的数据。 我的目的是保存服务器计数器的日常数据。 但是查询性能对我来说很重要 我脑海中有3个模型,但我不知道哪一个更适合我的项目。 1-服务器根目录: 我的数据模型: { "_id":Object(....), "serverId":0 "counters": [ { "counterId":0 , "inser

我对1对象的数据大小有问题。我不知道我的数据模型是真的吗? 情况如下: 我有25个服务器,200个服务器计数器和1440分钟的数据。 我的目的是保存服务器计数器的日常数据。 但是查询性能对我来说很重要

我脑海中有3个模型,但我不知道哪一个更适合我的项目。 1-服务器根目录: 我的数据模型:

{ "_id":Object(....), 
    "serverId":0
    "counters": [ 
                     { "counterId":0 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                .
                                                .1440 times "counterId":0
                                                .
                     { "counterId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                               .
                                                .1440 times "counterId":1
                                                .
                    .
                    .  200 Counters
                    .
                     { "counterId":200 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                               .
                                                .1440 times "counterId":200
                                                .
                       ] },
        .
        .
        .25 Server
        .
        .
{ "_id":Object(....), 
    "serverId":25
    "counters": [ 
                     { "counterId":0 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                .
                                                .1440 times "counterId":0
                                                .
                     { "counterId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                               .
                                                .1440 times "counterId":1
                                                .
                    .
                    .  200 Counters
                    .
                     { "counterId":200 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                               .
                                                .1440 times "counterId":200
                                                .
                       ] },
 { "_id":Object(....),
        "counterId":0  
        "servers": [ 
                         {  "serverId":0, "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                    .
                                                    .1440 times "serverId":0
                                                    .
                         { "serverId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                                   .
                                                    .1440 times "serverId":1
                                                    .
                        .
                        .  25 Server
                        .
                         { "serverId":25 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                                   .
                                                    .1440 times "serverId":200
                                                    .
                           ] },
            .
            .
            .200 Counter
            .
            .
    { "_id":Object(....),
        "counterId":200  
        "servers": [ 
                         {  "serverId":0, "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                    .
                                                    .1440 times "serverId":0
                                                    .
                         { "serverId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                                   .
                                                    .1440 times "serverId":1
                                                    .
                        .
                        .  25 Server
                        .
                         { "serverId":25 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                                   .
                                                    .1440 times "serverId":200
                                                    .
                           ] },
{ "_id" : ObjectId("515921e3bbea58d25eb07b22"), "serverId" : 0, "counterId" : 0, "inserted" : ISODate("2013-03-21T00:26:30Z"), "counterValue" : 0.03256159112788737, "min" : -29.967438408872113, "max" : 20.032561591127887 }
.
.7 billion data
.
问题: ----聚合框架的查询性能--: 当我尝试查找计数器1天的平均计数器值时,需要12秒 ---数据大小---- 这是不可能的建模像16 Mb时,我尝试满了


2-计数器根: 我的数据模型:

{ "_id":Object(....), 
    "serverId":0
    "counters": [ 
                     { "counterId":0 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                .
                                                .1440 times "counterId":0
                                                .
                     { "counterId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                               .
                                                .1440 times "counterId":1
                                                .
                    .
                    .  200 Counters
                    .
                     { "counterId":200 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                               .
                                                .1440 times "counterId":200
                                                .
                       ] },
        .
        .
        .25 Server
        .
        .
{ "_id":Object(....), 
    "serverId":25
    "counters": [ 
                     { "counterId":0 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                .
                                                .1440 times "counterId":0
                                                .
                     { "counterId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                               .
                                                .1440 times "counterId":1
                                                .
                    .
                    .  200 Counters
                    .
                     { "counterId":200 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                               .
                                                .1440 times "counterId":200
                                                .
                       ] },
 { "_id":Object(....),
        "counterId":0  
        "servers": [ 
                         {  "serverId":0, "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                    .
                                                    .1440 times "serverId":0
                                                    .
                         { "serverId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                                   .
                                                    .1440 times "serverId":1
                                                    .
                        .
                        .  25 Server
                        .
                         { "serverId":25 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                                   .
                                                    .1440 times "serverId":200
                                                    .
                           ] },
            .
            .
            .200 Counter
            .
            .
    { "_id":Object(....),
        "counterId":200  
        "servers": [ 
                         {  "serverId":0, "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                    .
                                                    .1440 times "serverId":0
                                                    .
                         { "serverId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                                   .
                                                    .1440 times "serverId":1
                                                    .
                        .
                        .  25 Server
                        .
                         { "serverId":25 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                                   .
                                                    .1440 times "serverId":200
                                                    .
                           ] },
{ "_id" : ObjectId("515921e3bbea58d25eb07b22"), "serverId" : 0, "counterId" : 0, "inserted" : ISODate("2013-03-21T00:26:30Z"), "counterValue" : 0.03256159112788737, "min" : -29.967438408872113, "max" : 20.032561591127887 }
.
.7 billion data
.
问题: ----聚合框架的查询性能--: 当我试图找到一天计数器的平均计数器值时,需要7秒 ---数据大小---- 这是不可能的建模像16 Mb时,我尝试,但我分为两个作品,它的作品


3-无根: 我的数据模型:

{ "_id":Object(....), 
    "serverId":0
    "counters": [ 
                     { "counterId":0 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                .
                                                .1440 times "counterId":0
                                                .
                     { "counterId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                               .
                                                .1440 times "counterId":1
                                                .
                    .
                    .  200 Counters
                    .
                     { "counterId":200 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                               .
                                                .1440 times "counterId":200
                                                .
                       ] },
        .
        .
        .25 Server
        .
        .
{ "_id":Object(....), 
    "serverId":25
    "counters": [ 
                     { "counterId":0 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                .
                                                .1440 times "counterId":0
                                                .
                     { "counterId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                               .
                                                .1440 times "counterId":1
                                                .
                    .
                    .  200 Counters
                    .
                     { "counterId":200 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                               .
                                                .1440 times "counterId":200
                                                .
                       ] },
 { "_id":Object(....),
        "counterId":0  
        "servers": [ 
                         {  "serverId":0, "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                    .
                                                    .1440 times "serverId":0
                                                    .
                         { "serverId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                                   .
                                                    .1440 times "serverId":1
                                                    .
                        .
                        .  25 Server
                        .
                         { "serverId":25 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                                   .
                                                    .1440 times "serverId":200
                                                    .
                           ] },
            .
            .
            .200 Counter
            .
            .
    { "_id":Object(....),
        "counterId":200  
        "servers": [ 
                         {  "serverId":0, "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,
                                                    .
                                                    .1440 times "serverId":0
                                                    .
                         { "serverId":1 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333} ,        
                                                   .
                                                    .1440 times "serverId":1
                                                    .
                        .
                        .  25 Server
                        .
                         { "serverId":25 , "inserted": ISODate(...) , "counterValue":122.2131 , "min":121 , "max":33333}         
                                                   .
                                                    .1440 times "serverId":200
                                                    .
                           ] },
{ "_id" : ObjectId("515921e3bbea58d25eb07b22"), "serverId" : 0, "counterId" : 0, "inserted" : ISODate("2013-03-21T00:26:30Z"), "counterValue" : 0.03256159112788737, "min" : -29.967438408872113, "max" : 20.032561591127887 }
.
.7 billion data
.
问题: ----聚合框架的查询性能--: 当我试图找到一天计数器的平均计数器值时,需要7秒

因此: 我无法决定必须使用哪种数据模型


谢谢。

我不知道你为什么在这里选择monogodb。 我会使用你的第三个选项,但是没有索引。为serverid和counterid字段添加索引,您将获得更好的时间

此外,你可能会有单独的集合用于读写,即

-像在第三个选项中一样使用一个集合 -一次和一小时/天/周(最有可能是一天)运行查询以获取聚合数据,并将其放入另一个集合中,还包括索引,您将从“否”开始进行查询。 之后,如果不再需要,您将删除已删除的数据

这是和

你的情况是

 db.events.ensureIndex({counterId:1,serverId:2, datetime:3 })
您可以使用索引中的字段序列,因为它可能导致不同的结果

另外,如果您要像我说的那样每小时聚合一次,那么最好将datetime作为第一个索引字段

 db.events.ensureIndex({datetime:1, counterId:2,serverId:3 })

注:添加索引显然会提高从采集中读取数据的速度,但会减慢向其中写入数据的速度。

因为我在其中使用MongoDb,一天有700万数据,我们希望显示一年的数据,所以我们有非常大的数据量。为了减少数据大小,我们决定使用mongodb。您使用mongodb减少数据大小的确切含义是什么?使用nosql db无论如何都不会减少数据量。它只是为您提供了不同的api,用于将数据读/写到存储器中。此外,如果您打算将数据存储一年,那么为所有可用时间段预聚合数据肯定是有意义的,即为年、月、周等创建单独的集合。MongoDB使用BSON存储数据。它还为其他数据库系统提供了许多轻量级数据。这是真的吗?坦白说,这是我在选择数据库引擎时最不愿意考虑的事情。我从来没有比较过mongo db和sql db存储相同数量的相似数据,但考虑到你们的规模,我不相信它们之间的差异不会如此巨大