MongoDB 数据库的命名、设计规范详解

来源:脚本之家  责任编辑:小易  

一,mongodump备份数据库1,常用命令格?1mongodump -h

MongoDB 数据库的命名和设计也有一套规范。只不过,由于用的人不多,目前在业界还没有形成权威的共识,今天根据我个人平时的一些经验,总结了一些规范

第一部分,我们先说命名规范。

文档

设计约束

databaseName 相当于库的概念defaultCollectionName Co

UTF-8 字符

1. 文档存储数据存储以BSON/JSON文档,这对于Web应用程序有很大的意义。开发者API喜

不能包含 \0 字符(空字符),这个字符标识建的结尾

其实和普通的关系型数据结构差不多,可以用关系型数据库思维去试着画。

. 和 $ 有特殊含义,需要避免

如何给mongodb数据库设置访问权限1,mongodb是没有默认管理员账号,所以要先添加管理员

区分大小写

女明星差不多的颜值都很高,但是能有气质的很少,有些气质源于自身,有些气质源于特色。比如舒淇,有人可能不觉得她美,但觉得她美的一般是女生,因为她的宽眼距和厚嘴唇很有魅力舒淇嘴唇厚,宽度远大于眉眼间距和鼻翼宽度她的嘴唇已经是脸上很性感的标识,而宽眼距让她性感之余还带点孩子般的天真,一静一动性感和天真切换自如嘴小而薄是多么没有辨识度,看了这一组图就知道了想看明星整容爆料,专业变美知识请搜索订阅号“更美”(ID:wanmeizhensuo)。关注我们,每周有免费福利让你变更美哦!还有被选为亚洲最时尚面孔的姚晨也是大嘴,如果把姚晨的嘴变薄,变小,瞬间有种尖嘴猴腮的既视感,更别提时尚气质了而亚洲时尚女星榜

键不能重复

美依礼芽(メイリア),本名水桥舞,1992年1月31日出生于日本茨城。日本综艺艺人兼歌手,niconico动画舞见,GARNiDELiA组合成员,爱称水まい。GARNiDELiA组合是以MARiA(音译:美依礼芽)和Toku-P来开展乐曲制作、企划、LIVE演出等活动的音乐组合。GARNiDELiA组合活跃于日本主流及最前卫的次文化音乐方面。乐曲主要发表于网络平台。代表曲目有《ASTEROiD》、《lamb》、《ambiguous》、《极乐净土》等。

键/值对有序

实践约束

谢谢邀请。对谈感情花钱这种现象,我的认识很是直接,感情和钱本身是两个概念,但有些男女在恋爱期间,在谈情说爱期间,要么是男方,要么是女方,事情过多,要求过多,除了三天两头开销大、花销大以外,还会生出很多花钱的事,有的甚至还向对方借钱,尤其是在热恋之中的男女,说起花钱的事,说起借钱的事,若是不答应,好像就是心不诚,意不愿一样。说真的,真心相爱的男女,是不会过多要求对方去乱花钱的,尤其是还没有达到谈婚论嫁之时,大肆的花钱、谈钱,久而久之,就会养成一种恶习,而当有一天拿不出钱来或者是不愿意拿出钱来,问题就会随之发生,严重时就会相互埋怨,最终落得是不欢而散,而且也是囊中羞涩,怨谁呢?所以,真正谈感情,那

【强制】文档中的key禁止使用_以外的特殊字符

是不是对家中的毛宝贝四处大小便而困扰不已呢?完美狗狗训练师传授秘诀,只要记录狗狗便溺时间、称赞狗狗等都可以帮助狗狗在固定地方大小便。家里养了一只可爱的小狗,但却因为它到处大小便而让你觉得家里多了一只小恶魔吗?不少人在饲养狗狗之后,对于如何训练狗狗在固定地点大小便而感到棘手。训练师香菇表示,要教狗狗在固定地点上厕所,必须先观察狗狗上厕所的时间,定时让狗狗去固定地方上厕所。香菇指出,狗狗有几个一定会想上厕所的时间,像是早上起床是最容易抓到的一个时间点,狗狗在经过长时间的睡眠后,起床一定需要上厕所,其他像是吃完饭、喝水后及睡觉之前,饲主都可以定时带狗狗去固定地方上厕所。除了定时之外,饲主须注意幼犬是

【强制】key全部小写,多个单词可以下划线分割

【强制】禁止使用数字打头的key

【强制】禁止自定义_id(_id一般自增,使用无序id极有可能降低写入性能)

【建议】相似类型文档放在一个集合中,能大幅提高索引利用率

【建议】若业务上对于存放数据大小写不敏感,则使用全部大写/小写存放(或者增加一个统一了大小写写的辅助字段)。 使用忽略大小写的查询极其耗费性能

【建议】不要存放太长的字符串

注意:MongoDB 索引仅支持 1KB 以内的字段

【强制】禁止使用数字打头的key

【强制】禁止自定义_id(_id一般自增,使用无序id极有可能降低写入性能)

【建议】相似类型文档放在一个集合中,能大幅提高索引利用率

【建议】若业务上对于存放数据大小写不敏感,则使用全部大写/小写存放(或者增加一个统一了大小写写的辅助字段)。 使用忽略大小写的查询极其耗费性能

【建议】不要存放太长的字符串

注意:MongoDB 索引仅支持 1KB 以内的字段

集合

设计约束

UTF-8 字符

1. 文档存储数据存储以BSON/JSON文档,这对于Web应用程序有很大的意义。开发者API喜

不能是空字符串(“”)

不能包含 \0 字符(空字符),这个字符标识集合名的结束

不能以 “system.” 开头,这是为系统保留的前缀

不在集合中包含字符 “$”

使用 “.” 来分隔不同命名空间的子集合,如一个博客可能包含两个子集合,blog.posts和blog.authors,而blog本身可以不存在

实践约束

【强制】禁止使用_以外的特殊字符

【强制】集合名称不超过64字符

【强制】集合名称全部小写

【强制】禁止使用数字打头的集合名,禁止使用system打头的集合名(system为系统集合前缀)

【建议】为了避免库级锁带来的问题,应尽量对写入较大的集合使用“单库单集合”的结构,所以对于新增业务应尽量创建新库,而不是在现有库中创建新集合

数据库

设计约束

UTF-8 字符

1. 文档存储数据存储以BSON/JSON文档,这对于Web应用程序有很大的意义。开发者API喜

不能是空字符串(“”)

基本上只能使用 ASCII 中的字母和数字。

不能含有 /、\、.、”、*、<、>、:、|、?、$、(空格)、\0(空字符)

全部使用小写。(支持大写,不建议使用)

不超过64字节

存在保留数据库如:admin、local、config

注意:数据库名称限制主要是由于数据库最终会变成文件系统里的文件,而数据库名就是相应的文件名,因此才有很多约束

实践约束

【强制】数据库名称全部小写

【强制】数据库名称不超过64字符

【强制】禁止使用_以外的特殊字符

【强制】禁止使用数字打头的数据库名

【强制】禁止与保留的数据库重名,如: admin,local,config等

索引

【强制】索引名称长度不超过128字节

【强制】禁止在数组字段上创建索引

【强制】创建组合索引时,尽量将数据基数大(唯一值多的数据)的字段放在组合索引前面

查询

【建议】先做等值查询,再做排序,再做范围查询

【建议】查询中的某些 $ 操作符可能会导致性能低下,尽量避免

注意:

ne,ne, ne,ne,not,exists,exists, exists,exists,nin,$or,尽量在业务中不要使用

$exist:因为松散的文档结构导致查询必须遍历每一个文档

$ne:如果当取反的值为大多数,则会扫描整个索引

$not:可能会导致查询优化器不知道应当使用哪个索引,所以会经常退化为全表扫描

$nin:全表扫描

$or:有多少个条件就会查询多少次,最后合并结果集,所以尽可能的使用 $in

命名空间

将数据库名添加到集合前,得到集合的完全限定名,称为命名空间(namespace),如cms数据库的blog.posts集合,命名空间即为:

cms.blog.posts。实际使用中命名空间长度不得超过100字节。

第二部分,设计规范。

数据库设计规范

数据库名约定为小写。

数据库名称不能包含除'_'以外的特殊字符,例如:/ \ . “ $。

数据库名称最多为64个字符。

数据库上线需经过DBA评审。

集合设计规范

集合名称约定为小写。

集合名称不能包含除‘'以外的特殊字符字符;集合名称禁止以system.开头。

集合名称的最大长度为64个字符,包括前缀的【database.】内容。

集合名称的命名规则和MySQL数据库表的命名规则相同。 a) 同一模块的集合尽可能使用相同的前缀名,集合名称尽可能表达用途。 b) 数据表 <模块标识><表标识> 例如:order_header , order_detail

c) 编码表 base_<模块标识><表标识> d) 日志表 log<模块标识><表标识>

固定集合可以用于记录日志,其插入数据更快,可以实现在插入数据时,淘汰最早的数据。固定集合需要显式创建,指定Size的大小,还能够指定文档的数量。集合不管先达到哪一个限制,之后插入的新文档都会把最老的文档移出。

索引命名:idx<构成索引的字段名>。如果字段名字过长,可采用字段缩写。

文档设计规范

Key的命名规范:不能以$开头;不能包含.(点号)。

文档中的_id键推荐使用默认值,禁止向_id中保存自定义的值。MongoDB文档中都会有一个“_id”键,默认是个ObjectID对象(标识符中包含时间戳、机器ID、进程ID和计数器)。MongoDB在指定_id与不指定_id插入时速度相差很大,指定_id会减慢插入的速率。

推荐使用短字段名。与关系型数据库不同,MongoDB集合中的每一个文档都需要存储字段名,长字段名会需要更多的存储空间。

禁止在同一个集合字段中存储多个数据类型的数据。

如若将日期类型选择为string,不同的日期格式的文档,不支持等值查询,不支持范围查询。创建一个测试集合product,分别向集合插入Date:”20180425″和Date:”2018-04-25″两笔数据。等值查询、范围查询($gte, $lte)只能查到日期格式相同的数据,都为一笔数据。

MongoDB大小写敏感,如果字段无需大小写敏感,为了提高查询效率,应尽量在统一了大小写之后再插入到数据库中。

MongoDB是文档型数据库,数据以BSON形式存储在文档中。MongoDB能够支持最大16 MB的文档大小。建议尽量不要存储大型对象,将文档控制在16 MB以内。

通过$size查询数组大小,但是$size运算符不使用索引和限制准确匹配(不能指定$Sized 范围)。因此,如果需要基于数组的大小执行查询,可以在文档设计中增加size属性。例如在商品评价中,其他人可以对评价进行投票。为了阻止用户多次投票和对有帮助的评论进行排序,所以,评价文档设计是:在一个数组字段(voter_ids)保存了所有评论用户的ID,而数组大小缓存在helpful_votes字段里。

分片键必须有索引,分片键大小限制为512byte,一旦集合已经分片,不可以直接修改分片键。不接受向已进行分片的collection上插入无分片键的文档,也不支持空值插入。

片键的设计原则:

a) 所有的插入、更新、删除将会均匀发送到集群的所有分片中。

b) 所有的查询将会在集群中的所有分片中均匀地分发。

c) 所有的更新或者删除操作将会只面向相关的分片,不会发送到一个没有存储被修改数据的分片上。

d) 一个查询将不会被发送到没有存储被查询数据的分片上。

连接规范

正确连接副本集,副本集提供了数据的保护、高可用和灾难恢复的机制。如果主节点宕机,其中一个从节点会自动提升为从节点。

合理控制连接池的大小,限制连接数资源,可通过Connection String URL中的maxPoolSize 参数来配置连接池大小。Mongod 的服务模型是每个网络连接由一个单独的线程来处理,每个线程配置了1MB 的栈空间,当网络连接数太多时,过多的线程会导致上下文切换开销变大,同时内存开销也会上涨。

复制集读选项。默认情况下,复制集的所有读请求都发到Primary,Driver可通过设置的Read Preference 来将读请求路由到其他的节点。

a) Primary:默认规则,所有读请求发到Primary。

b) PrimaryPreferred: Primary优先,如果Primary不可达,请求Secondary。

c) Secondary:所有的读请求都发到Secondary。

d) SecondaryPreferred:Secondary优先,当所有的Secondary不可达时,请求Primary。

e) Nearest:读请求发送到最近的可达节点上(通过ping探测得出最近的节点)。

操作规范

MongoDB数据库更新文档有两种实现方式—文档替换和目标字段更新。既可以完整替换现有的文档,也可以使用更新操作符来修改某个字段。使用操作符,例如$set操作符和$push操作符,无论原始的大小,可以更新文档里的指定字段。频繁文档更新的场景下,使用目标更新可以在序列化和传输数据上花费更少的时间,获得更好的性能。

多文档更新,在默认情况下,只会更新匹配查询器的第一个文档。要更新所有的匹配文档,需要显式指定多文档更新模式–添加参数multi:true。

在文档级别更新是原子性的,这意味着一条更新10个文档的语句可能在更新3个文档后由于某些原因失败。应用程序必须根据自己的策略来处理这些失败。

update结合upsert可以用来处理,当文档存在时更新,文档不存在时插入。如果查询选择器匹配,更新就正常执行;如果没有匹配的文档,就会插入新的文档。新文档的字段是查询选择器和目标更新文档的逻辑合并。

复制集的数据安全及写策略,Write Concern 用于控制写入安全的级别。Write Concern 是一个性能和数据一致性的权衡,应根据业务场景进行设定。对于强一致性场景,建议w>1或者等于majority。

聚合框架是MongoDB的高级查询语言,它允许通过转换和合并由多个文档中的数据来生成新的单个文档里不存在的文档信息。可以把MongoDB的聚合框架等价于SQL的Group By 语句。

更多关于MongoDB 数据库的文章大家可以点击下面的相关链接

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

论文中mongodb数据库要怎么表示

您好,很高兴为您解答。

1)列出当前的数据库

MongoDB shell version: 1.8.1

connecting to: test

> show dbs -www.linuxidc.com-

admin 0.03125GB

local (empty)

  可以使用show dbs来列出当前有多少个数据库,上面看到的是有两个,分别是admin和local。

  

2) 定义新的数据库名

  我们通过使用“use new-databasename”的语法去使用一个新的数据库,注意,即使你的数据库还没建立起来,依然可以这样使用,因为mongodb会在真正插入了数据后,才会真正建立起来。

>use mkyongdb

switched to db mkyongdb

> show dbs

admin 0.03125GB

local (empty)

 注意,在use mkyongdb后,mkyongdb实际上还没真正建立起来,只是表明目前是在使用mkyongdb了。

  

3)保存数据

  定义一个collection,名为“users”,然后插入数据,如下:

> db.users.save( {username:"mkyong"} )

> db.users.find()

{ "_id" : ObjectId("4dbac7bfea37068bd0987573"), "username" : "mkyong" }

>

> show dbs -www.linuxidc.com-

admin 0.03125GB

local (empty)

mkyongdb 0.03125GB

 可以看到,用db.users.find()可以找出已插入的数据。这个时候,名为“users”的collection已经建立起来了,同时,数据库mkyongdb也建立起来了。

mongodb如何获取表结构,以及表字段的名称?

mongodb 是文档型数据库,数据并不是以二维表存储的,何来表结构....

如何设计高性能mongodb数据库

有效的数据模型是为应用服务的,设计构架的关键问题是文档模型适合使用嵌入式模型(embed)还是使用引用模型(references)。

嵌入式数据模型(Embedded Data Models)

在MongoDB中,你可能将相关数据嵌入到一个单一结构或文档,这些模式通常被称为“非正规”模型,但是它充分利用了MongoDB富文档模型的有点。

嵌入式数据模型允许应用程序存储相关的信息在一条数据库记录中,这样应用程序可能需要更少的查询和更新来完成常规的操作。

如何建立一个含有用户名和密码的mongodb的数据库

  太小气了,还是给你简单说一说吧,下边是我之前研究mongodb时候做的笔记中的一点部分。

  mongoDB默认用户认证是关闭的。

  修改 /etc/mongod.conf 文件。mongoDB默认情况下任何客户端都可以连接27017端口,且没有认证,默认情况下没有管理员帐户。通过修改这个配置文件可以更改为登陆时进行权限认证。

  mongoDB中如果想要给某个数据库创建一个用户,需要首先进入该数据库,然后使用addUser命令。在这里也可以将用户设置为只读(db.addUser("jack","jack",true),第三个参数表示是否时“只读用户”)。

  要使用超级管理员,需要先连接admin数据库并登陆管理员帐户,然后连接其他数据库就可以行使管理员权限。

  用户信息保存及认证过程

  类似MySQL将系统用户信息保存在mysql.user表。MongoDB也将系统用户的username、pwd保存在admin.system.users集合中。其中pwd = md5(username + “:mongo:” + real_password)。这本身并没有什么问题。username和:mongo:相当于对原密码加了一个salt值,即使攻击者获取了数据库中保存的md5 hash,也没法简单的从彩虹表中查出原始密码。

  权限管理常用命令

  1. #进入数据库admin

  use admin

  2. #增加或修改用户密码

  db.addUser('name','pwd')

  3. #查看用户列表

  db.system.users.find()

  4. #用户认证

  db.auth('name','pwd')

这一个返回1就认证成功了,只有认证成功才能对数据库进行操作

  5. #删除用户

  db.removeUser('name')

  6. #查看所有用户

  show users

  7. #查看所有数据库

  show dbs

  8. #查看所有的collection

  show collections

  9. #查看各collection的状态

  db.printCollectionStats()

  10. #查看主从复制状态

  db.printReplicationInfo()

MongoDB数据库中 db.foo.find() 中 "db"指的什么?

楼主是想搞清楚db是系统对象还是某一个数据库的名字(比如教学管理数据库)

db

foo

find()

都是数据库管理系统里面的东东

use test

switched to db test

先use打开一个数据库,然后把系统变量db的地址指向test,这样子db.foo.find()中的db就是test数据库了呀,把switched to db test看成C指针赋值一样吧

  • 本文相关:
  • 28个mongodb经典面试题详解
  • mongodb常用数据库命令大全
  • 修复 mac brew 安装 mongodb 报 error: no available formula with the name ‘mongodb’ 问题详解
  • mongodb启动报错 28663 cannot start server
  • node.js操作mongodb数据库实例分析
  • mongodb数据库安装配置、基本操作实例详解
  • windows10安装mongodb4.0详细步骤及启动配置教程
  • nodejs对mongodb数据库的增加修删该查实例代码
  • mongodb基本命令实例小结
  • win10 64位安装mongodb数据库的详细教程
  • linux下安装mongodb教程
  • python操作redis和mongodb的方法
  • dotnet core链接mongodb代码实例
  • zabbix3.4监控mongodb数据库状态的方法
  • windows安装压缩版mongodb的教程
  • 在laravel中使用mongodb的方法示例
  • 关于mongodb谨防索引seek的效率问题详析
  • mongodb中数据的替换方法实现类replace()函数功能详解
  • java操作mongodb的模糊查询和精确查询
  • mongodb复制集原理详解
  • 关于nosql之mongodb的一些总结
  • mongodb入门教程之c#驱动操作实例
  • mongodb中的参数限制与阀值详析
  • mongodb 数据库的命名、设计规范详解
  • mongodb 查询操作的实例详解
  • mongodb简单操作示例【连接、增删改查等】
  • mongodb 4.0事务回滚的辛酸历程探究
  • mongodb的基本特性与内部构造的讲解
  • 论文中mongodb数据库要怎么表示
  • mongodb如何获取表结构,以及表字段的名称?
  • 如何设计高性能mongodb数据库
  • 如何建立一个含有用户名和密码的mongodb的数据库
  • MongoDB数据库中 db.foo.find() 中 "db"指的什么?
  • 导出mongodb数据库一般要什么文件
  • Mongodb数据库基本问题
  • mongodb数据库有哪些优势
  • mongodb 数据库结构 怎么画
  • 如何给mongodb数据库设置访问权限
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved