mongodb读取性能改进

mongodb读取性能改进,mongodb,mongodb-query,Mongodb,Mongodb Query,在mongodb中,我们存储包含以下字段的平面数据(我们的事件对象): EventReceivedTimeStamp 事件状态(已发送、失败、拒绝) 独一无二的 系统(5个系统) 触发器(20个触发器) 错误信息 数据大小和更新 数据统计:2.7亿条 每天更新:300万次(每天新增300万次,删除300万次) 文档大小:约2-3KB 搜索条件: EventReceivedTime范围和状态 事件接收范围和系统以及触发器和状态 唯一Id 我们在上述字段上创建了复合索引/索引 在对数据集执行搜索

在mongodb中,我们存储包含以下字段的平面数据(我们的事件对象):

  • EventReceivedTimeStamp
  • 事件状态(已发送、失败、拒绝)
  • 独一无二的
  • 系统(5个系统)
  • 触发器(20个触发器)
  • 错误信息
  • 数据大小和更新

    • 数据统计:2.7亿条
    • 每天更新:300万次(每天新增300万次,删除300万次)
    • 文档大小:约2-3KB
    搜索条件:

  • EventReceivedTime范围和状态
  • 事件接收范围和系统以及触发器和状态
  • 唯一Id
  • 我们在上述字段上创建了复合索引/索引

    在对数据集执行搜索时,我们没有获得以毫秒为单位的响应时间。在我们的案例中,我们如何提高mongodb的性能

    样本文档

    {
        "_id" : ObjectId("570cd8a55b66f3af1b4bd17e"),
        "_class" : "com.companyName.commons.dto.EventRecord",
        "uuid" : BinData(3,"10OXD+C51CEXS4E8jz0vnQ=="),
        "moc" : "APP_NOTIFICATION",
        "eventReceivedDateTime" : ISODate("2016-04-12T11:14:43.766Z"),
        "retryAttemptsMade" : 0,
        "retryAttemptDateTime" : ISODate("2016-04-12T11:14:43.766Z"),
        "eventStatus" : "FAILED",
        "systemName" : "OMS",
        "triggerName" : "COD_ORDER_NIGHT",
        "referenceId" : "39437515",
        "aggregatorBased" : true,
        "sentToDndQueue" : false,
        "lastProcessedDateTime" : ISODate("2016-04-12T11:14:44.294Z"),
        "errorMessage" : "Exception in validating attributes ",
        "suborderCodes" : [
            "39437515"
        ],
        "dndEvent" : false
    }
    
    **db.collection_name.getIndices()**
    
        [
            {
                "v" : 1,
                "key" : {
                    "_id" : 1
                },
                "name" : "_id_",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "uuid" : 1
                },
                "name" : "uuid",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "moc" : 1
                },
                "name" : "moc",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "eventReceivedDateTime" : 1
                },
                "name" : "eventReceivedDateTime",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "retryAttemptsMade" : 1
                },
                "name" : "retryAttemptsMade",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "retryAttemptDateTime" : 1
                },
                "name" : "retryAttemptDateTime",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "eventStatus" : 1
                },
                "name" : "eventStatus",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "systemName" : 1
                },
                "name" : "systemName",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "triggerName" : 1
                },
                "name" : "triggerName",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "referenceId" : 1
                },
                "name" : "referenceId",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "aggregatorBased" : 1
                },
                "name" : "aggregatorBased",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "salesforceTagged" : 1
                },
                "name" : "salesforceTagged",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "sentToDndQueue" : 1
                },
                "name" : "sentToDndQueue",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "senderId" : 1
                },
                "name" : "senderId",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "lastProcessedDateTime" : 1
                },
                "name" : "lastProcessedDateTime",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "errorMessage" : 1
                },
                "name" : "errorMessage",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "suborderCodes" : 1
                },
                "name" : "suborderCodes",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "dndEvent" : 1
                },
                "name" : "dndEvent",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "eventStatus" : 1,
                    "eventReceivedDateTime" : 1
                },
                "name" : "SDR",
                "ns" : "admin.event_record"
            },
            {
                "v" : 1,
                "key" : {
                    "triggerName" : 1,
                    "eventStatus" : 1,
                    "systemName" : 1,
                    "eventReceivedDateTime" : 1
                },
                "name" : "STSDR",
                "ns" : "admin.event_record"
            }
        ]
    

    注意:将共享解释输出

    这取决于您如何创建复合索引。创建复合索引时,请确保检查如何在集合上运行查询。定义复合索引,使索引的第一个键是匹配的(在查询-equal语句中),然后在查询中添加基于范围的键。参考

    另外,确保您有足够的内存(RAM)来处理数据集。您可以参考官方MongoDB文档-。

    1)。您可以使用批量操作来读取、写入和更新。它大大缩短了时间

    2) 。创建架构,使一起使用的字段位于一个集合中

    3) 。您必须加快搜索速度,因为即使写入数据需要搜索现有数据。所以,勇敢地制作索引。如果创建更多索引,数据写入操作会变慢。(此外,还需要更新索引)


    4) 。使用uniqeId作为_id

    我们通过以下方式改进了查询的性能:

    1) 更改了分页逻辑。我们不再使用pageNumber/PageSize,而是开始使用上次响应中发送的最后一个元素的id


    2) 其次,我们开始提示我们的查询,以便它应该使用适当的复合索引。

    是否使用索引?你能为我们提供示例数据流吗?我们这里需要硬数据:示例文档、查询、输出
    yourQuery.explain()
    、输出
    db.yourcoll.getIndexes()
    @MarkusWMahlberg:我已经将示例文档与索引一起共享了。我将在一段时间内分享解释输出,因为我们的数据在云上,而我现在无法访问它。谢谢如果你有帮助的话,请考虑投票。这将有助于其他人解决同样的问题。