首页 > 解决方案 > 在mongodb中搜索更多嵌套对象或更多文档是否更快

问题描述

我正在为我的 mongodb 数据库考虑以下文档结构。第一个模型会导致更多的文档,但第二个模型会在每个“事件”数组中包含更多的“事件”对象。顺便说一下,每个“事件”数组中有数千个“事件”对象。

我需要能够按博彩公司、体育、市场、交易所、联赛和事件过滤“事件”数组中的对象。最常见的查询是没有过滤器。哪种模型最好,拥有更多文档会显着减慢获取事件对象的请求吗?

{
    bookmaker: 'Bet365',
    sport: 'Football',
    market: 'Match Result'
    data: [
        {
            exchange: 'Smarkets',
            data: [
                {
                    league: 'English Premier League',
                    events: [...],
                    last_update: '84792394832'
                },
                {
                    league: 'English Championship',
                    events: [...],
                    last_update: '84792394832'
                },
                ...
            ]
        }
        ... more exchanges
    ]
}

然后这个...

{
    bookmaker: 'Bet365',
    data: [
        {
            sport: 'Tennis',
            events: [...],
            last_update: '84792394832'
        },
        {
            league: 'Football',
            events: [...],
            last_update: '84792394832'
        },
        ...
    ]
}

对于第二种模型,市场、交易所和联赛位于 events 数组中的每个事件对象中。我假设现在尝试按市场、交易所或联赛进行过滤会慢很多,因为查询必须检查“事件”数组中的每个对象,而不仅仅是能够几乎立即注销整个文档. 相比之下,第二个在“事件”数组中获取“事件”对象是否更快?

编辑: 我需要存储大约 100,000 个像下面这样的“事件”对象,如果我使用上面的第一个文档模型,那么我不需要存储市场、交易所或联盟。对于上面的第二个模型,我将有大约 30 个文档,每个文档在“事件”属性中嵌入 3000-4000 个这些“事件”对象,而对于第一个模型,我将有大约 500 个文档,每个文档包含大约 200 个嵌入文档他们。我认为第一个模型对我来说会更好,但我想知道当我想将每个“事件”对象从数据库中拉出时,这个模型是否会慢很多。这是“事件”对象...

{
    event_id: 'fl23rtkb5kh1hren213h',
    date: '2308323922',
    event: 'Man United vs Liverpool',
    bet: 'Man United',
    market: 'Match Result',
    league: 'English Premier League',
    bookmaker: 'Bet365',
    odds1: 3.3,
    exchange: 'Smarkets',
    odds2: 3.4,
    availability: 132.11,
    rating: 98.11,
    snr_rating: 62.15
}

标签: mongodbmongoose

解决方案


推荐阅读