MongoDB 中的数据模式非常灵活。同一集合中的文档不需要具有同一字段或结构,集合文档的公用字段可能包含不同类型的数据。 设计 MongDB 模式时应注意的问题根据用户需求来设计模式。 如果想一起使用对象,请将这些对象合并到一个文档中,否则要将它们分开(但是要确保不需要连接)。 经常复制数据(但要有一定限度),因为与计算时间相比,硬盘空间显得非常便宜。
任何关系型数据库都采用一种典型的设计模式,展示表的数目以及表之间的关系。然而 MongoDB 却没有关系这个概念。 MongoDB 相比 RDBMS 的优势模式较少:MongoDB 是一种文档数据库,一个集合可以包含各种不同的文档。每个文档的字段数、内容以及文档大小都可以各不相同。采用单个对象的模式,清晰简洁。 没有复杂的连接功能。 深度查询功能。
MongoDB 是一款跨平台、面向文档的数据库。用它创建的数据库可以实现高性能、高可用性,并且能够轻松扩展。MongoDB 的运行方式主要基于两个概念:集合(collection)与文档(document)。 数据库数据库是集合的实际容器。每一数据库都在文件系统中有自己的一组文件。一个 MongoDB 服务器通常有多个数据库。 集合集合就是一组 MongoDB 文档。
MongoDB 是一个强大的分布式存储引擎,天然支持高可用、分布式和灵活设计。MongoDB 的一个很重要的设计理念是:服务端只关注底层核心能力的输出,至于怎么用,就尽可能的将工作交个客户端去决策。这也就是 MongoDB 灵活性的保证,但是灵活性带来的代价就是使用成本的提升。
MongoDB基于wiredTiger提供的泛化SI的功能,重构了readHistory(readMajority)的能力,基于wiredTiger提供的AllCommittedTimestamp API,重构了前缀一致的主从复制(Prefix-Consistent-Replication)。
MongoDB 分布式文件存储数据库
MongoDB 没有提供类似 SQL 数据库所具有的自动增长功能(auto-increment)。默认情况下,MongoDB 将 _id 字段(使用 12 字节的 ObjectId)来作为文档的唯一标识。但在有些情况下,我们希望 _id 字段值能够自动增长,而不是固守在 ObjectId 值上。 由于这不是 MongoDB 的默认功能,所以我们按照 MongoDB 文档所建议的方式,使用 counters 集合来程序化地实现该功能。
固定集合(Capped Collection)是一种尺寸固定的“循环”集合,可提供高效的创建、读取、删除等操作。这里所指的“循环”的意思是,当分配给集合的文件尺寸耗尽时,就会自动开始删除最初的文档,不需要提供任何显式的指令。 如果文档更新后增加了文档的尺寸,那么固定集合会限制对文档的更新。
Rockmongo 是一个 MongoDB 的管理工具,可以用来管理服务器、数据库、集合、文档、索引以及很多其他内容。它的操作简单便利,易于读写创建文档。它的作用有点像是 PHP 和 MySQL 所使用的 PHPMyAdmin 工具。 下载 Rockmongo从这里下载最新版的 Rockmongo。 安装 Rockmongo下载完毕后,可以将包解压缩至服务器的根目录处,将解压文件夹重新命名为 rockmongo。
在 MongoDB 文档中,Map-Reduce(映射归约)是一种将大量数据压缩成有用的聚合结果的数据处理范式。MongoDB 使用 mapReduce 命令来实现映射归约操作。映射归约通常用来处理大型数据。 映射归约命令mapReduce 命令的基本格式为: >db.collection.mapReduce( function() {emit(key,value);
额外开销每个索引都会占据一些空间,从而也会在每次插入、更新与删除操作时产生一定的开销。所以如果集合很少使用读取操作,就尽量不要使用索引。 内存使用因为索引存储在内存中,所以应保证索引总体的大小不超过内存的容量。如果索引总体积超出了内存容量,就会删除部分索引,从而降低性能。
假如一个 users 集合中具有下列文档: { "address": { "city": "Los Angeles", "state": "California", "pincode": "123" }, "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin"}上述文档包含一个地址子文档(address sub-document)与一个标签数组(tags array)。
对于衡量数据库及索引设计的效率来说,分析查询是一个很重要的衡量方式。经常使用的查询有 $explain 和 $hint。 使用 $explain$explain 操作提供的消息包括:查询消息、查询所使用的索引以及其他的统计信息。在分析索引优化方案时,这是一个非常有用的工具。 在上一节中,我们使用如下查询,针对 users 集合的字段 gender 和 user_name 创建了索引: >db.users.
在上一节中,我们使用引用关系实现了归一化的数据库结构,这种引用关系也被称作手动引用,即可以手动地将引用文档的 id 保存在其他文档中。但在有些情况下,文档包含其他集合的引用时,我们可以使用数据库引用(MongoDB DBRefs)。 数据库引用 vs 手动引用我们将利用一个例子来展示如何用数据库引用代替手动引用。
MongoDB 数据转储为了在 MongoDB 中创建数据库备份,需要使用 mongodump 命令。该命令会将服务器上的所有数据都转储到 dump 目录中。你可以使用很多选项来限制转储的数据量,或者创建远程服务器备份。 格式mongodump 命令的基本语法格式为: >mongodump 范例开启 mongod 服务器。假设 mongod 服务器运行在 localhost 上,端口为 27017。
sort() 方法MongoDB 中的文档排序是通过 sort() 方法来实现的。sort() 方法可以通过一些参数来指定要进行排序的字段,并使用 1 和 -1 来指定排序方式,其中 1 表示升序,而 -1 表示降序。 格式sort() 方法基本格式为: >db.COLLECTION_NAME.find().
limit() 方法要想限制 MongoDB 中的记录,可以使用 limit() 方法。limit() 方法接受一个数值类型的参数,其值为想要显示的文档数。 语法格式limit() 方法的基本语法格式为: >db.COLLECTION_NAME.find().
remove() 方法MongoDB 利用 remove() 方法 清除集合中的文档。它有 2 个可选参数: deletion criteria:(可选)删除文档的标准。 justOne:(可选)如果设为 true 或 1,则只删除一个文档。 语法格式remove() 方法的基本语法格式如下所示: >db.COLLECTION_NAME.
MongoDB 中的 update() 与 save() 方法都能用于更新集合中的文档。update() 方法更新已有文档中的值,而 save() 方法则是用传入该方法的文档来替换已有文档。 update() 方法update() 方法更新已有文档中的值。 语法格式update() 方法基本格式如下: >db.COLLECTION_NAME.
find() 方法要想查询 MongoDB 集合中的数据,使用 find() 方法。 语法格式find() 方法的基本格式为: >db.COLLECTION_NAME.find() find() 方法会以非结构化的方式来显示所有文档。 pretty() 方法用格式化方式显示结果,使用的是 pretty() 方法。 语法格式>db.mycol.find().pretty() 范例>db.mycol.find().
关注时代Java