日期:2014-05-16  浏览次数:20508 次

MongoDB 使用大数据量的collection

使用大数据量的collection.

在MongoDB存储信息用多个collection来替代一个collection。这样做每个重复的数据不必存在每个对象中,
并且也不必再这个键上创建索引了。更重要的是性能,可以通过指定组来分布数据。

举个例子,假使我们要存储日志。并且有N种类型,如dev,debug,ops等。我们用一个collection来存储。
{ log : 'dev', ts : ..., info : ...  }

我们现在把这个collection按照类型进行拆分。 ?'logs.dev' collection, a 'logs.debug' collection, 'logs.ops', 等.:

// logs.dev:
{ ts : ..., info : ... }

当然,如果我们不需要同时查询多个日志,这么做是有意义的。
一般来说,数量较大的collection不会有显著的性能缺陷。

限制

默认的情况下,MongoDB的每个数据库有24000左右命名空间的限制。
每个命名空间有628字节。.nsfile默认为16MB。

每个collection以及索引都算作namespace。因此如果每个collection有一个索引,
我们能创建12000个collection。
--nssize允许提升这个限制。

小心的是每个collection都会占用一些存储-很少的KB。更近一步说,任何的索引都需要至少8KB的数据空间,
也就意味着每个b-tree page大小为8KB.
如果有很多collection以及元数据经常要页输出,会导致核心的操作速度变慢。

?

--nssize


如果需要更多的collection,运行mongod --nssize参数。这个参数会让.ns文件更大,
支持更多的collection。注意的是 --nssize 用于最新创建数据库。如果你运行在一个存在的数据库,
希望重新定义大小,那么在运行--nssize之后,要运行db.repairDatabase()命令来调整大小。