带有分片的MongoDB内存索引

时间:2012-01-31 18:00:57

标签: mongodb indexing scalability sharding in-memory

街上的一句话是,如果你不能保留你在内存中使用的索引,MongoDB会变慢。这如何与分片一起使用?分片是否仅在内存中保留自己的BTree,或者每个分片是否需要将整个集合的索引保留在内存中?

2 个答案:

答案 0 :(得分:6)

  

分片是否只在内存中保留自己的BTree ......?

是的,每个分片管理自己的索引。

  

街上的一句话是,如果你不能保留你在内存中使用的索引,MongoDB会变慢。

使用分片和二级索引时,实际上可能会更糟。关键问题是路由器进程(mongos)对二级索引中的数据一无所知。

如果使用分片键执行查询,它将直接路由到正确的服务器。在大多数情况下,这可以平衡工作量。因此,100个查询可以分布在100个服务器上,每个服务器只回答1个查询。

但是,如果使用辅助键执行查询,则该查询必须转到每个服务器。因此,对路由器的100次查询将导致100个服务器上的10,000个查询或每个服务器100个查询。随着您添加更多服务器,这些“非shardkey”查询的效率会越来越低。工作量变得更加平衡。

MongoDB文档here中提供了一些详细信息。

答案 1 :(得分:0)

只是它自己的索引部分(它不知道其他分片的数据)。缩放不会很好,否则。有关分片的更多信息,请参阅此文档: http://www.mongodb.org/display/DOCS/Sharding+Introduction

http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key