Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb复合索引或单个索引_Mongodb_Performance_Indexing_Database - Fatal编程技术网

mongodb复合索引或单个索引

mongodb复合索引或单个索引,mongodb,performance,indexing,database,Mongodb,Performance,Indexing,Database,我需要一些关于如何正确设置带有mongodb的索引的建议 假设我的数据收集是这样的: 球员 - age - scores - fouls - yellow cards - red cards - offsides 我的问题是,我的潜在查询可以覆盖所有索引组合,例如: Get players that age < 30 and yellow card > 3 Get players that age < 30 and yellow card > 3 and r

我需要一些关于如何正确设置带有mongodb的索引的建议

假设我的数据收集是这样的:

球员

 - age
 - scores
 - fouls
 - yellow cards
 - red cards
 - offsides
我的问题是,我的潜在查询可以覆盖所有索引组合,例如:

Get players that age < 30 and yellow card > 3
Get players that age < 30 and yellow card > 3 and red_cards >6
Get players that age < 30 and red_cards card > 3 and scores > 2
Get players that scores < 30 and yellow card > 3 and fouls < 6 and red_cards >2
Get players that scores < 30 and yellow card > 3 and fouls < 6 and red_cards >2 and age > 25
获得年龄<30岁且黄牌>3的玩家
获得年龄<30岁、黄牌>3张、红牌>6张的玩家
获得年龄<30岁、红牌>3且分数>2的玩家
获得得分<30分、黄牌>3分、犯规<6分、红牌>2分的球员
获得得分<30分、黄牌>3分、犯规<6分、红牌>2分、年龄>25岁的球员
在这种情况下,分配索引的最佳方式是什么?如果我的集合有6个字段(如示例中所示),我是否需要36个索引?
或者每个索引有一个字段是更好的选择吗?

这个问题的答案取决于您的集合大小、查询速率、不同类型查询的分布(具有某些参数集的查询的速率高于其他查询),等等

如果您收集的文档的大小小于100k(例如),您可以确信,所有查询都会很快,即使它们不使用索引,也会一直进行顺序扫描

另一方面,如果每秒有1000个这样的查询,它将无法按预期工作,在这种情况下,您必须使用探查器(system.profile)来确定不同类型查询的分布。当您得到这个分布时,很明显,您应该创建哪些索引

您的主要目标应该是减少为满足查询而读取的数据量(索引+文档)


最后,您可以通过创建来提高读取吞吐量。

每个集合的索引不能超过64个。但是,我们的建议是,要远远低于这个数字。如果您的数据插入率很高,则更重要的是保持较小的数据插入率。阅读本文感谢您的回答,avarage的文档大小不会超过10k,但我将拥有大量这样的文档(大约8亿),我们设计了一个用于高查询率和高吞吐量的系统。在这种情况下,您建议怎么做?@BmaorLO,如果10 k是单个文档的大小,那么您应该在问题中提到这一点,因为这很重要。您最初的描述大约有6个字段,此类文档的大小约为0.1K(而不是10K)。你能更清楚地写下平均文档大小、文档总数、查询率、文档结构和典型查询吗?你说得对,很抱歉我一开始就不清楚。在这个周末我做了更多的研究之后,数字如下。该文档将与此处发布的原始问题类似。我将有10亿条这样的记录,每个文件将是0.1K(而不是10k抱歉)。我需要支持尽可能多的快速阅读。在这种情况下,您建议怎么做?@BmaorLO,很难查询100Gb(0.1K*10^9)的数据。在这种情况下,您可以为任何查询创建索引。使用探查器确定最需要的索引。对不起,没有具体的建议给你。您还应该尝试使用关系数据库,您可能会从部分索引中受益。谢谢@amehenin,我感谢您花时间和精力帮助我。游戏时间到了:)