返回顶部
首页 > 资讯 > 数据库 >MongoDB 数据库的命名和设计规范有哪些
  • 153
分享到

MongoDB 数据库的命名和设计规范有哪些

2024-04-02 19:04:59 153人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关mongoDB 数据库的命名和设计规范有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。文档设计约束UTF-8 字符不能包含

今天就跟大家聊聊有关mongoDB 数据库的命名和设计规范有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

文档

设计约束

UTF-8 字符

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

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

区分大小写

键不能重复

键/值对有序

实践约束

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

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

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

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

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

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

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

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

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

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

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

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

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

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

集合

设计约束

UTF-8 字符

不能是空字符串(“”)

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

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

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

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

实践约束

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

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

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

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

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

数据库

设计约束

UTF-8 字符

不能是空字符串(“”)

基本上只能使用 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 数据库的命名和设计规范有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB 数据库的命名和设计规范有哪些

本文链接: https://lsjlt.com/news/55821.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MongoDB 数据库的命名和设计规范有哪些
    今天就跟大家聊聊有关MongoDB 数据库的命名和设计规范有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。文档设计约束UTF-8 字符不能包含 ...
    99+
    2024-04-02
  • MongoDB设计命名规范有哪些
    MongoDB设计命名规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.    &nbs...
    99+
    2024-04-02
  • 数据库命名规范有哪些
    本篇文章给大家分享的是有关数据库命名规范有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数据库命名规范  采用26个英文字母(区分大小写)...
    99+
    2024-04-02
  • MongoDB的命名设计规范
    简介MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最...
    99+
    2024-04-02
  • 数据库设计规范有哪些
    1. 数据库表命名规范:表名应该具有描述性,表名应该使用小写字母,单词之间使用下划线连接。2. 字段命名规范:字段名应该使用小写字母...
    99+
    2023-06-10
    数据库设计规范 数据库
  • MySQL数据库设计规范有哪些
    本篇文章给大家分享的是有关MySQL数据库设计规范有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、数据库设计以下所有规范会按照【高危】...
    99+
    2024-04-02
  • SQLServer数据库有哪些设计规范
    这篇文章给大家介绍SQLServer数据库有哪些设计规范,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  SQLServer数据库的设计规范有什么  1、对象注释规则:  注释头:注释...
    99+
    2024-04-02
  • MongoDB数据库建立规范有哪些
    MongoDB数据库建立规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 一.数据库命名注意事项:1...
    99+
    2024-04-02
  • 关系型数据库设计规范有哪些
    关系型数据库设计规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、每个表增删改的范围尽量都在本表进行这条原则也是与三大范式有些相...
    99+
    2024-04-02
  • 数据库设计规范化要求有哪些
    本篇内容主要讲解“数据库设计规范化要求有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库设计规范化要求有哪些”吧!  要求一:表中应该避免可为空的列。 ...
    99+
    2024-04-02
  • CSS和HTML命名规范有哪些
    今天就跟大家聊聊有关CSS和HTML命名规范有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 面向属性的命名方法,是什么属性就写什么名。 精简高效CSS命名之“三无原则”,此“三...
    99+
    2023-06-04
  • 数据库设计规范
    (如果两个关联的列的数据类型不一样,在关联的时候会进行隐式转换,造成列上索引失效,查询效率大幅降低)没特殊需求的情况下,统一使用innodb统一字符集可以避免由于字符集转换产生的乱码,数据库和表字符集统一使...
    99+
    2024-04-02
  • 数据库设计的范式规范
    关系型数据库的设计遵循六大范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 第一范式 1NF 1NF,即数...
    99+
    2024-04-02
  • Golang的命名规范有哪些
    本篇内容介绍了“Golang的命名规范有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!很少见人总结一些命名规范,也可能是笔者孤陋寡闻, ...
    99+
    2023-06-22
  • C#的命名规范有哪些
    本篇内容主要讲解“C#的命名规范有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#的命名规范有哪些”吧!C#项目开发实例中,对于规范的制定,是很重要的要求。合理的方法名,合适的命名都是C#...
    99+
    2023-06-17
  • C#命名规范有哪些
    这篇文章给大家介绍C#命名规范有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 ADO.NET 命名规范数据类型数据类型简写标准命名举例ConnectionconconNorthwindCommandcmdcmd...
    99+
    2023-06-17
  • Java命名规范有哪些
    这篇文章将为大家详细讲解有关Java命名规范有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基本命名规范包命名包名按照域名的范围从大到小逐步列出,恰好和Internet上的域名命名规则相...
    99+
    2023-06-17
  • 数据库命名的规则有哪些
    这篇文章给大家介绍数据库命名的规则有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。数据库命名规范 1 目的规范数据库各种对象的命名规则。2 数据库命名原则2.1 数据文件如果数据库...
    99+
    2024-04-02
  • 数据库规范化设计
    操作异常 修改异常、插入异常、删除异常 数据依赖 数据间的联系 函数依赖FD 属性捡的联系,最基本的数据依赖 若确定X,则可以唯一的确定Y,则称Y依赖于X记X->Y 若X->Y,且Y是X的子集则称为平凡的函数依赖:平凡的FD 若X...
    99+
    2018-08-29
    数据库规范化设计
  • mysql数据库设计规范
    一、数据库设计规范1.使用innodb引擎2.数据库和表的字符集统一使用utf83.所有表和字段添加注释4.单表数据量控制...
    99+
    2019-12-06
    mysql数据库设计规范
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作