前言
下面话不多说了,来一起看看详细的介绍吧一、BSON文档
二、Namespaces
命名空间的个数:对于MMAPV1引擎,个数最大为大约为24000个,每个collection以及index都是一个namespace;对于wiredTiger引擎则没有这个限制。
三、indexes
组合索引最多能包含31个field。四、Data
Database Size:MMAPV1引擎而言,每个database不得持有超过16000个数据文件,即单个database的总数据量最大为32TB,可以通过设置“smallFiles”来限定到8TB。
每个Database中collection个数:对于MMAPV1引擎而然,每个database所能持有的collections个数取决于namespace文件大小(用来保存namespace)以及每个collection中indexes的个数,最终总尺寸不超过namespace文件的大小(16M)。wiredTiger引擎不受到此限制。五、Replica Sets
replica set中最多可以有7个voting members。(投票者)六、Sharded Clusters
Coverd Queries:即查询条件中的Fields必须是index的一部分,且返回结果只包含index中的fields;对于sharding集群,如果query中不包含shard key,索引则无法进行覆盖。虽然_id不是“shard key”,但是如果查询条件中只包含_id,且返回的结果中也只需要_id字段值,则可以使用覆盖查询,不过这个查询似乎并没有什么意义(除非是检测此_id的document是否存在)。
对于sharded collection,update、remove对单条数据操作(操作选项为multi:false或者justOne),必须指定shard key或者_id字段;否则将会抛出error。
在chunk迁移时允许的最大文档个数:如果一个chunk中documents的个数超过250000(默认chunk大小为64M)时,或者document个数大于 1.3 *(chunk最大尺寸(有配置参数决定)/ document平均尺寸),此chunk将无法被“move”(无论是balancer还是人工干预),必须等待split之后才能被move。七、shard key
“shard key索引”可以为基于shard key的正序索引,或者以shard key开头的组合索引。shard key索引不能是multikey索引(基于数组的索引)、text索引或者geo索引。
单调递增(递减)的shard key会限制insert的吞吐量;如果_id是shard key,需要知道_id是ObjectId()生成,它也是自增值。对于单调递增的shard key,collection上的所有insert操作都会在一个shard节点上进行,那么此shard将会承载cluster的全部insert操作,因为单个shard节点的资源有限,因此整个cluster的insert量会因此受限。如果cluster主要是read、update操作,将不会有这方面的限制。为了避免这个问题,可以考虑使用“hashed shard key”或者选择一个非单调递增key作为shard key。(rang shard key 和hashed shard key各有优缺点,需要根据query的情况而定)。八、Operations
九、命名规则
database名称中不要包含:/ .‘'$*<>:|?
collection名称可以以“_”或者字母字符开头,但是不能包含”$”符号,不能为空字符或者null,不能以“system.”开头,因为这是系统保留字。
{
"_id" : ObjectId("5c6cc376a589c200018f7312"),
"id" : "9472",
"data" : {
"name" : "测试",
"publish_date" : "2009-05-15",
"authors" : [
{
"author_id" : 3053,
"author_name" : "测试数据"
}
],
}
}
db.getCollection().find({'data.authors.0.author_id': 3053})
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对自学php网的支持。