MST
星途 面试题库

面试题:Python在MongoDB大数据集合中的分页与排序优化

给定一个有海量文档的MongoDB集合,文档包含'timestamp'(时间戳)字段。要求使用Python实现一个分页功能,每页显示50条数据,并且按照'timestamp'倒序排列。同时,说明如何优化查询性能以应对大数据量,例如索引的使用策略。
14.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

Python代码实现分页功能

import pymongo


def get_paginated_data(page_num):
    client = pymongo.MongoClient("mongodb://localhost:27017/")
    db = client["your_database"]
    collection = db["your_collection"]

    # 计算跳过的文档数
    skip_count = (page_num - 1) * 50
    data = list(collection.find().sort("timestamp", pymongo.DESCENDING).skip(skip_count).limit(50))
    return data


优化查询性能策略

  1. 索引使用
    • 创建索引:为 timestamp 字段创建索引。在 MongoDB 中可以使用以下命令创建索引:
db.your_collection.createIndex({timestamp: -1})
- **复合索引**:如果除了按 `timestamp` 排序外,还经常根据其他字段进行查询或过滤,可以考虑创建复合索引。例如,如果还会根据 `category` 字段过滤数据,可以创建如下复合索引:
db.your_collection.createIndex({category: 1, timestamp: -1})
  1. 投影:仅返回需要的字段,减少数据传输量。例如,如果只需要 timestamptitle 字段,可以这样查询:
data = list(collection.find({}, {"timestamp": 1, "title": 1, "_id": 0}).sort("timestamp", pymongo.DESCENDING).skip(skip_count).limit(50))
  1. 分片:对于海量数据,考虑使用 MongoDB 的分片功能。将数据分布在多个服务器上,减轻单个服务器的负载,提高查询性能。需要在 MongoDB 集群中设置分片键,选择合适的分片键很重要,例如可以选择 timestamp 字段作为分片键,这样可以按时间范围对数据进行分割存储,在分页查询时能够更高效地定位数据。