NoSQL数据库-MongoDB和Redis
- 格式:doc
- 大小:512.50 KB
- 文档页数:36
NoSQL数据库的数据模型与查询技巧随着大数据和云计算的发展,传统的关系型数据库在存储和查询海量数据时面临着一些瓶颈和挑战。
为了解决这些问题,NoSQL数据库应运而生。
与关系型数据库相比,NoSQL数据库具有更高的可伸缩性、更好的性能和更灵活的数据模型。
本文将介绍NoSQL数据库的数据模型以及查询技巧。
一、NoSQL数据库的数据模型NoSQL数据库有多种数据模型,包括键值对、文档型、列族型和图型等。
每种数据模型都有自己的特点和适用场景。
1. 键值对(Key-Value)模型键值对模型是最简单和最基础的NoSQL数据模型。
它使用键值对存储数据,类似于字典或哈希表。
键值对模型在处理原子数据上非常高效,适用于缓存和快速存储/检索数据的场景。
常见的键值对数据库包括Redis和Memcached。
2. 文档(Document)型模型文档型模型是将数据存储为类似于JSON或XML格式的文档。
文档中的数据可以是多层次的,具有嵌套结构,类似于关系数据库的表和行。
文档型数据库常用于存储结构化和半结构化的数据,并且支持动态模式。
MongoDB和Couchbase是常见的文档型数据库。
3. 列族(Column-Family)型模型列族型模型以列族的形式存储数据,其中每个列族都是无模式的,每条记录可以有不同的列。
列族模型特别适用于存储具有相似结构但不同属性的数据。
HBase是常见的列族型数据库。
4. 图(Graph)型模型图型模型适用于处理图结构数据,如社交网络关系、知识图谱和地理数据等。
图型数据库通过节点和边来表示实体之间的关系,并支持复杂的图查询和图算法。
常见的图数据库包括Neo4j和OrientDB。
二、NoSQL数据库的查询技巧NoSQL数据库的查询语言和关系型数据库有所不同,因此掌握一些查询技巧是非常重要的。
1. 使用索引创建合适的索引能够显著提高查询的性能。
在选择要创建索引的字段时,应根据查询频率和过滤条件进行权衡。
mongodb与redis的数据类型MongoDB与Redis的数据类型一、MongoDB数据类型MongoDB是一种面向文档存储的数据库,支持多种数据类型。
下面我们将介绍MongoDB常见的数据类型。
1. 数值类型MongoDB支持整型和浮点型两种数值类型。
整型可以是32位或64位,浮点型可以是32位或64位。
2. 字符串类型MongoDB的字符串类型是UTF-8编码的,可以存储任意长度的字符串。
3. 布尔类型MongoDB的布尔类型只有两个值,即true和false。
4. 日期类型MongoDB的日期类型存储了从1970年1月1日至今的毫秒数。
5. 数组类型MongoDB支持数组类型,可以存储多个值。
数组中的值可以是任意类型。
6. 对象类型MongoDB支持对象类型,可以存储键值对。
对象中的值可以是任意类型。
7. Null类型MongoDB的Null类型表示空值。
8. ObjectId类型MongoDB的ObjectId类型是一个12字节的唯一标识符,通常用于文档的主键。
9. 二进制数据类型MongoDB的二进制数据类型可以存储任意二进制数据。
10. 正则表达式类型MongoDB的正则表达式类型可以存储正则表达式。
11. JavaScript代码类型MongoDB的JavaScript代码类型可以存储JavaScript代码。
12. 代码作用域类型MongoDB的代码作用域类型可以存储JavaScript代码和其作用域。
二、Redis数据类型Redis是一种高性能的键值存储数据库,支持多种数据类型。
下面我们将介绍Redis常见的数据类型。
1. 字符串类型Redis的字符串类型是最基本的数据类型,可以存储任意类型的数据,包括二进制数据。
2. 列表类型Redis的列表类型是一个有序的字符串列表,可以存储多个字符串。
3. 集合类型Redis的集合类型是一个无序的字符串集合,可以存储多个字符串,且每个字符串都是唯一的。
⾮关系型数据库⼀、⾮关系型数据库:1.⾮关系型数据库被称为NoSQL数据库作为关系数据库的补充2.⾼性能、⾼并发对数据的⼀致性要求不⾼3.NoSQL典型产品:memcached(纯内存),redis(持久化缓存),mongodb⼆、⾮关系型数据库种类1)键值(key-value)存储数据库键值数据库就类似传统语⾔中使⽤的哈希表。
可以通过key来添加、查询或者删除数据,因为使⽤key主键访问,所以会获得很⾼的性能及扩展性。
键值(key-value)数据库主要是使⽤⼀个哈希表,这个表中有⼀个特定的键和⼀个指针指向特定的数据。
key/value模型对于IT系统来说的优势在于简单、易部署、⾼并发。
典型产品:memcached(纯内存),redis(持久化缓存)2)列存储典型产品:Cassandra,Hbase3)⾯向⽂档的数据库典型产品:mongodb4)图形(Graph)数据库典型产品:Neo4J,InfoGrid三、⾮关系型数据库介绍1)Memcached(key-value)为纯内存缓存软件,⼀旦重启所有数据都会丢失,因此。
新浪⽹基于Mencached开发了⼀个开源项⽬Memcachedb。
通过为Mencached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使memcached具备了事物恢复能⼒,持久化数据存储能⼒和分布式复制能⼒,memcachedb⾮常适合需要超⾼性能读写速度、持久化保存的应⽤场景。
2)redis(key-value)redis的数据都是缓存在内存中,区别是redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步。
redis⽀持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合等)redis特点:1)⽀持内存缓存,这个功能相当于memcached2)⽀持持久化存储,这个功能相当于memcachedb,ttserver3)数据类型更丰富(redis⽀持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合等))。
数据库试用报告1. 引言数据库是计算机科学领域中非常重要的一个概念,用于存储和管理大量的数据。
在进行软件开发和数据分析等工作时,数据库扮演着至关重要的角色。
本文将对三种常见的数据库进行试用和评估,包括MySQL、MongoDB和Redis。
通过对比它们在性能、可扩展性、安全性和易用性等方面的表现,为读者提供选择合适数据库的参考。
2. MySQLMySQL是一种关系型数据库管理系统(RDBMS),是使用最广泛的开源数据库。
下面对MySQL进行试用和评估。
2.1 性能MySQL在性能方面表现出色。
由于其优化的查询算法和索引机制,MySQL在处理大量数据时能够提供快速的响应时间。
此外,MySQL支持并发处理和事务管理,确保数据库的高效性能。
2.2 可扩展性MySQL具有良好的可扩展性。
它支持主从复制、分区和集群等技术,使得数据库能够处理大规模的数据和高并发请求。
通过合理配置和管理,MySQL能够应对不断增长的数据和用户量。
2.3 安全性MySQL提供了丰富的安全功能。
它支持用户身份验证和访问控制,可以限制对数据库的访问权限。
此外,MySQL提供了数据加密和传输加密等功能,保护数据的机密性和完整性。
2.4 易用性MySQL易于学习和使用。
它有完善的文档和丰富的社区支持,对于开发人员和管理员来说都很友好。
此外,MySQL提供了图形化的用户界面和命令行工具,便于管理和操作数据库。
3. MongoDBMongoDB是一种面向文档的NoSQL数据库,适合存储大量的非结构化数据。
下面对MongoDB进行试用和评估。
MongoDB在处理非结构化数据方面表现出色。
它使用了灵活的文档模型,能够高效地存储和查询数据。
MongoDB还具有高度可扩展的架构,能够应对大量的读写请求。
3.2 可扩展性MongoDB具有良好的可扩展性。
它支持分片和副本集等技术,可以在集群中水平扩展数据库,并提供高可用性。
此外,MongoDB还支持自动分片和负载均衡,使得数据库能够处理大规模的数据和请求。
常见的非关系型数据库有Neo4j、MongoDB、Redis 常见的非关系型数据库有:1、mongodb;2、cassandra;3、redis;4、hbase;5、neo4j;其中mongodb是非常著名的NoSQL数据库,它是一个面向文档的开源数据库。
1、MongoDBMongoDB是最著名的NoSQL数据库。
它是一个面向文档的开源数据库。
MongoDB是一个可伸缩和可访问的数据库。
它在c++中。
MongoDB 同样可以用作文件系统。
在MongoDB中,JavaScript可以作为查询语言使用。
通过使用sharding MongoDB水平伸缩。
它在流行的JavaScript框架中非常有用。
人们真的很享受分片、高级文本搜索、gridFS和map-reduce功能。
惊人的性能和新特性使这个NoSQL数据库在我们的列表中名列第一。
特点:提供高性能;自动分片;运行在多个服务器上;支持主从复制;数据以JSON样式文档的形式存储;索引文档中的任何字段;由于数据被放置在碎片中,所以它具有自动负载平衡配置;支持正则表达式搜索;在失败的情况下易于管理。
优点:易于安装MongoDB;MongoDB Inc.为客户提供专业支持;支持临时查询;高速数据库;无模式数据库;横向扩展数据库;性能非常高。
缺点:不支持连接;数据量大;嵌套文档是有限的;增加不必要的内存使用。
2、CassandraCassandra是Facebook为收件箱搜索开发的。
Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。
通常,这些数据分布在许多普通服务器上。
您还可以添加数据存储容量,使您的服务保持在线,您可以轻松地完成这项任务。
由于集群中的所有节点都是相同的,因此不需要处理复杂的配置。
Cassandra是用Java编写的。
Cassandra查询语言(CQL)是查询Cassandra数据库的一种类似sql的语言。
因此,Cassandra在最佳开源数据库中排名第二。
NoSQL数据库的特点与应用场景MongoDB、HBase、Redis目录1.NoSQL的四大种类 (3)2.MongoDB (4)3.HBase (6)4.Redis (8)1.NoSQL的四大种类NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。
在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数据库处理任务,这时NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟。
目前大家基本认同将NoSQL数据库分为四大类:键值存储数据库,文档型数据库,列存储数据库和图形数据库,其中每一种类型的数据库都能够解决关系型数据不能解决的问题。
在实际应用中,NoSQL数据库的分类界限其实没有那么明显,往往会是多种类型的组合体。
主流nosql的详解:MongoDB、Hbase、Redis2.MongoDBMongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。
它在许多场景下可用于替代统的关系型数据库或键/值存储方式。
1.MongoDB特点∙所用语言:C++∙特点:保留了SQL一些友好的特性(查询,索引)。
∙使用许可:AGPL(发起者:Apache)∙协议:Custom, binary(BSON)∙Master/slave复制(支持自动错误恢复,使用sets 复制)∙内建分片机制∙支持javascript表达式查询∙可在服务器端执行任意的javascript函数∙update-in-place支持比CouchDB更好∙在数据存储时采用内存到文件映射∙对性能的关注超过对功能的要求∙建议最好打开日志功能(参数--journal)∙在32位操作系统上,数据库大小限制在约2.5Gb∙空数据库大约占192Mb∙采用GridFS存储大数据或元数据(不是真正的文件系统)2.MongoDB优点:1)更高的写负载,MongoDB拥有更高的插入速度。
mongodb和redis的区别MongoDB和Redis是两种不同类型的数据库,各自适用于不同的使用场景和需求。
以下是它们的一些主要区别:1. 数据存储模型:•MongoDB:是一种文档型数据库,使用BSON(Binary JSON)格式来存储数据。
每个文档是一个类似JSON的数据结构,可以包含嵌套的字段和数组。
•Redis:是一种键值存储数据库,其中每个键都与一个值相关联。
这个值可以是字符串、哈希表、列表等数据结构。
2. 查询语言:•MongoDB:提供了强大的查询语言,支持丰富的查询操作,可以进行复杂的条件查询、范围查询和聚合操作等。
•Redis:查询主要基于键,支持一些特定数据结构的操作,但相对简单,不如MongoDB提供的灵活。
3. 数据持久性:•MongoDB:通常用于持久性存储,数据被保存在磁盘上,并且支持复杂的数据模型和查询。
•Redis:通常用作缓存系统,可以将数据保存在内存中,因此读写速度非常快。
但是,Redis也可以通过持久化机制将数据写入磁盘以保证数据的持久性。
4. 数据关系:•MongoDB:支持丰富的数据模型和复杂的关系。
可以使用嵌套文档、数组等方式表示数据之间的关联。
•Redis:主要用于简单的键值存储,不直接支持关系型数据的模型。
5. 使用场景:•MongoDB:适用于需要处理大量复杂数据、支持复杂查询和数据关系的场景,如应用程序的后端数据库、内容管理系统等。
•Redis:适用于需要高性能缓存、实时计数器、消息队列等场景,以及对数据结构进行特定操作的应用。
6. 数据持久性:•MongoDB:提供较好的持久性,支持数据的安全存储和可靠性。
•Redis:通过快照(snapshot)和持久化(append-only file)等机制,可以提供数据的持久性。
总体而言,选择MongoDB还是Redis取决于具体的应用需求。
如果需要处理复杂的数据模型和支持复杂查询,MongoDB可能更适合;如果需要高性能的缓存和键值对存储,Redis可能更合适。
nosql数据库入门与实践pdf在当今的信息化时代,数据已经成为企业的重要资产。
随着数据量的不断增加,传统的关系型数据库已经无法满足企业的需求。
因此,NoSQL数据库应运而生,成为了大数据时代的新型数据库。
本文将介绍NoSQL数据库的基本概念、特点、应用场景以及实践案例,帮助读者快速入门NoSQL数据库。
一、NoSQL数据库概述NoSQL数据库是指非关系型数据库,它们不同于传统的关系型数据库,不需要事先定义数据结构,具有灵活的数据模型和良好的可扩展性。
NoSQL数据库适用于大数据、高并发、低一致性要求等场景,能够快速处理海量数据,提高系统的可用性和可扩展性。
常见的NoSQL数据库有MongoDB、Cassandra、Redis等。
二、NoSQL数据库的特点1. 非关系型:NoSQL数据库不需要事先定义数据结构,可以随时添加字段或属性。
2. 灵活的数据模型:NoSQL数据库支持多种数据模型,如键值对、列族、文档等,可以根据实际需求选择合适的数据模型。
3. 高可扩展性:NoSQL数据库设计之初就考虑到了可扩展性,可以通过分片、复制等技术实现分布式处理和高可用性。
4. 大数据量处理:NoSQL数据库适用于大数据场景,可以快速处理海量数据,提高系统性能。
5. 低一致性要求:NoSQL数据库可以根据实际需求选择不同的一致性模型,如最终一致性、强一致性等。
三、NoSQL数据库应用场景1. 大数据处理:NoSQL数据库适用于大数据场景,能够快速处理海量数据,提高系统性能。
2. 高并发场景:NoSQL数据库具有良好的可扩展性和高可用性,能够应对高并发场景的请求压力。
3. 灵活的业务需求:NoSQL数据库的非关系型特点使其能够适应灵活多变的数据需求,降低开发成本和时间。
4. 数据存储量大:对于需要存储大量数据的场景,NoSQL数据库可以轻松应对,提高存储效率。
四、NoSQL数据库实践案例以下是一个简单的MongoDB实践案例:1. 安装MongoDB:首先需要在服务器上安装MongoDB,可以从MongoDB官网下载安装包并按照官方文档进行安装。
数据库是软件开发中常用的重要工具。
它可以用来存储和管理数据,实现对数据的有效组织和访问。
在软件开发的过程中,选择一个合适的数据库工具是至关重要的。
本文将介绍一些常用的数据库工具,并探讨它们的特点和适用场景。
一、关系型数据库管理系统(RDBMS)关系型数据库是一种以关系模型为基础的数据库系统。
关系型数据库管理系统(RDBMS)是用于管理关系型数据库的软件。
RDBMS具有结构化的数据存储方式和强大的查询能力,广泛应用于企业级应用中。
1. MySQLMySQL是一种开源的关系型数据库管理系统,由瑞典公司MySQL AB开发和维护。
它具有良好的性能、稳定性和可扩展性,是互联网应用开发中最常用的数据库工具之一。
MySQL支持标准的SQL查询语言,并具有丰富的功能和插件生态系统。
2. PostgreSQLPostgreSQL是一种功能强大的开源关系型数据库管理系统。
它支持复杂的数据类型和高级的查询功能,具有良好的可扩展性和健壮性。
PostgreSQL还提供了许多高级特性,如事务处理、并发控制和全文搜索等,适用于大型企业级应用。
3. Oracle DatabaseOracle Database是由Oracle公司开发的一种商业关系型数据库管理系统。
它具有强大的功能和高度可靠性,广泛用于大型企业级系统。
Oracle Database支持分布式数据库、高并发事务处理和高级安全性等特性,适合处理大规模的数据和高负载的应用场景。
二、NoSQL数据库与关系型数据库不同,NoSQL数据库是一种非关系型数据库,它提供了更灵活和可扩展的数据存储方式。
NoSQL数据库适用于大规模的分布式系统和高并发的应用场景。
1. MongoDBMongoDB是一种开源的NoSQL数据库,采用文档存储的方式,非常适用于处理半结构化和非结构化的数据。
它具有高度可扩展性、灵活的数据模型和强大的查询能力。
MongoDB广泛用于Web应用开发和大数据处理等领域。
各类数据库的存储引擎介绍数据库的存储引擎是指数据库管理系统(DBMS)内部的组件,用于处理数据的存储、检索和操作。
不同的数据库系统通常会提供多种不同的存储引擎,每个存储引擎都有其独特的特点和适用场景。
本文将介绍几种常见的数据库存储引擎,包括关系型数据库和非关系型数据库。
一、关系型数据库存储引擎1. InnoDBInnoDB是MySQL数据库中的默认存储引擎,它支持事务、行级锁定和外键约束等特性。
InnoDB使用B+树索引来优化查询性能,并且支持崩溃恢复和数据复制功能,因此在需要高并发处理和数据一致性的场景下较为适用。
2. MyISAMMyISAM是MySQL数据库的另一种存储引擎,它不支持事务和行级锁定,但在读取方面具有较高的性能。
MyISAM使用B树索引来优化查询,并且具有较小的存储空间要求。
因此,在需要快速读取和较少写入的场景下,可以选择MyISAM存储引擎。
3. PostgreSQLPostgreSQL也是一种流行的关系型数据库系统,它支持多种存储引擎,包括B+树索引和哈希索引等。
其中,B+树索引适用于范围查询和排序操作,而哈希索引则适用于等值查询。
此外,PostgreSQL还支持事务、并发控制和数据完整性等高级特性。
二、非关系型数据库存储引擎1. MongoDBMongoDB是一种常用的面向文档的NoSQL数据库系统,它使用B 树索引和地理空间索引来加快查询速度。
MongoDB支持高度可伸缩的分布式架构,并且具有自动分片和复制功能。
此外,MongoDB还支持数据的动态模式,使得数据存储更加灵活。
2. RedisRedis是一种主要用于缓存和会话存储的内存数据库,它使用哈希表和有序集合等数据结构来高效地存储和检索数据。
Redis具有快速的读写速度和丰富的数据类型支持,非常适用于高并发和实时数据处理的场景。
3. CassandraCassandra是一种分布式的高可扩展性NoSQL数据库系统,它使用分布式哈希表来存储和管理数据。
NoSQL数据库—MongoDB和Redis目录1NoSQL简述 (4)2MongoDB简介 (4)3术语介绍 (5)4MongoDB资源消耗 (6)5交互式shell (6)6一般功能 (7)6.1插入 (7)6.2查询 (7)6.3删除 (7)6.4索引 (8)6.5map/reduce (8)7模式设计 (8)8嵌入与引用 (9)9GridFS (11)9.1GridFS表示的对象信息 (11)9.2GridFS管理 (12)10Replication(复制) (13)10.1master-slave模式 (13)10.2replica pairs模式 (13)10.3受限的master-master复制 (14)11Sharding(分片) (14)11.1sharding介绍 (14)11.2sharding的配置和管理 (15)12Java API简介 (16)13MongoDB实例分析 (17)13.1图片保存在文件系统中 (17)13.2图片保存在数据库中 (19)14MongoDB常用API总结 (23)15Redis简介 (27)15.1Redis特性 (27)16Redis数据类型 (28)16.1String类型 (28)16.2List类型 (29)16.3Set类型 (29)16.4ZSet类型 (29)16.5Hash类型 (30)17All data in memory, but saved on disk (30)18Redis的Master-Slave模式 (30)19Redis虚拟内存管理 (31)20Redis实例分析 (32)21Redis命令总结 (32)21.1连接操作相关的命令 (33)21.2对value操作的命令 (33)21.3对String操作的命令 (33)21.4对List操作的命令 (34)21.5对Set操作的命令 (34)21.6对zset(sorted set)操作的命令 (35)21.7对Hash操作的命令 (36)21.8持久化 (36)21.9远程服务控制 (36)NoSQL数据库—MongoDB和Redis1NoSQL简述CAP(Consistency,Availabiity,Partition tolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
关系型数据库通过把更新操作写到事务型日志里实现了部分耐用性,但带来的是写性能的下降。
MongoDB 等NoSQL数据库背后蕴涵的哲学是不同的平台应该使用不同类型的数据库,MongoDB通过降低一些特性来达到性能的提高,这在很多大型站点中是可行的。
因为MongoDB是非原子性的,所以如果如果应用需要事务,还是需要选择MySQL等关系数据库。
NoSQL数据库,顾名思义就是打破了传统关系型数据库的范式约束。
很多NoSQL数据库从数据存储的角度看也不是关系型数据库,而是key-value数据格式的hash数据库。
由于放弃了关系数据库强大的SQL查询语言和事务一致性以及范式约束,NoSQL数据库在很大程度上解决了传统关系型数据库面临的诸多挑战。
在社区中,NoSQL是指“not only sql”,其特点是非关系型,分布式,开源,可水平扩展,模式自由,支持replication,简单的API,最终一致性(相对于即时一致性,最终一致性允许有一个“不一致性窗口”,但能保证最终的客户都能看到最新的值)。
2MongoDB简介mongo取自“humongous”(海量的),是开源的文档数据库──nosql数据库的一种。
MongoDB是一种面向集合(collection)的,模式自由的文档(document)数据库。
面向集合是说数据被分成集合的形式,每个集合在数据库中有惟一的名称,集合可以包含不限数目的文档。
除了模式不是预先定义好的,集合与RDBMS中的表概念类似,虽然二者并不是完全对等。
数据库和集合的创建是“lazy”的,即只有在第一个document被插入时集合和数据库才真正创建——这时在磁盘的文件系统里才能看见。
模式自由是说数据库不需要知道存放在集合中的文档的结构,完全可以在同一个集合中存放不同结构的文档,支持嵌入子文档。
文档类似于RDBMS中的记录,以BSON的格式保存。
BSON是Binary JSON的简称,是对JSON-like文档的二进制编码序列化。
像JSON(JavaScript Object Notation)一样,BSON 支持在对象和数组内嵌入其它的对象和数组。
有些数据类型在JSON里不能表示,但可以在BSON里表示,如Date类型和BinData(二进制数据),Python原生的类型都可以表示。
与Protocal Buffers(Google开发的用以处理对索引服务器请求/应答的协议)相比,BSON模式更自由,所以更灵活,但这样也使得每个文档都要保存字段名,所以空间压缩上不如Protocol Buffers。
BSON第一眼看上去像BLOB,但MongoDB理解BSON的内部机制,所以MongoDB 可以深入BSON对象的内部,即使是嵌套的对象,这样MongoDB就可以在顶层和嵌套的BSON对象上建立索引来应对各种查询了。
MongoDB可运行在Linux、Windows和OS X平台,支持32位和64位应用,默认端口为27017。
推荐运行在64位平台,因为MongoDB为了提高性能使用了内存映射文件进行数据管理,而在32位模式运行时支持的最大文件为2GB。
MongoDB查询速度比MySQL要快,因为它cache了尽可能多的数据到RAM中,即使是non-cached数据也非常快。
当前MongoDB官方支持的客户端API语言就多达8种(C|C++|Java|Javascript|Perl|PHP|Python|Ruby),社区开发的客户端API还有Erlang、Go、Haskell......3术语介绍数据库、集合、文档每个MongoDB服务器可以有多个数据库,每个数据库都有可选的安全认证。
数据库包括一个或多个集合,集合以命名空间的形式组织在一起,用“.”隔开(类似于JA V A/Python 里面的包),比如集合blog.posts和blog.authors都处于"blog"下,不会与bbs.authors有名称上的冲突。
集合里的数据由多个BSON格式的文档对象组成,document的命名有一些限定,如字段名不能以"$"开头,不能有".",名称"_id"被保留为主键。
如果插入的文档没有提供“_id”字段,数据库会为文档自动生成一个ObjectId对象作为“_id”的值插入到集合中。
字段“_id”的值可以是任意类型,只要能够保证惟一性。
BSON ObjectID是一个12字节的值,包括4字节的时间戳,3字节的机器号,2字节的进程id以及3字节的自增计数。
建议用户还是使用有意义的“_id”值。
MongoDb相比于传统的SQL关系型数据库,最大的不同在于它们的模式设计(Schema Design)上的差别,正是由于这一层次的差别衍生出其它各方面的不同。
如果将关系数据库简单理解为由数据库、表(table)、记录(record)三个层次概念组成,而在构建一个关系型数据库的时候,工作重点和难点都在数据库表的划分与组织上。
一般而言,为了平衡提高存取效率与减少数据冗余之间的矛盾,设计的数据库表都会尽量满足所谓的第三范式。
相应的,可以认为MongoDb由数据库、集合(collection)、文档对象(Document-oriented、BSON)三个层次组成。
MongoDb里的collection可以理解为关系型数据库里的表,虽然二者并不完全对等。
当然,不要期望collection会满足所谓的第三范式,因为它们根本就不在同一个概念讨论范围之内。
类似于表由多条记录组成,集合也包含多个文档对象,虽然说一般情况下,同一个集合内的文档对象具有相同的格式定义,但这并不是必须的,即MongoDb的数据模式是自由的(schema-free、模式自由、无模式),collection 中可以包含具有不同schema的文档记录,支持嵌入子文档。
4MongoDB资源消耗考虑到性能的原因,mongo做了很多预分配,包括提前在文件系统中为每个数据库分配逐渐增长大小的文件集。
这样可以有效地避免潜在的文件系统碎片,使数据库操作更高效。
一个数据库的文件集从序号0开始分配,0,1...,大小依次是64M,128M,256M,512M,1G,2G,然后就是一直2G的创建下去(32位系统最大到512M)。
所以如果上一个文件是1G,而数据量刚好超过1G,则下一个文件(大小为2G)则可能有超过90%都是空的。
如果想使磁盘利用更有效率,下面是一些解决方法:1. 只建立一个数据库,这样最多只会浪费2G。
2. 每个文档使用自建的“_id”值而不要使用默认的ObjectId对象。
3. 由于每个document的每个字段名都会存放,所以如果字段名越长,document的数据占用就会越大,因此把字段名缩短会大大降低数据的占用量。
如把“timeAdded”改为“tA”。
Mongo使用内存映射文件来访问数据,在执行插入等操作时,观察mongod进程的内存占用时会发现量很大,当使用内存映射文件时是正常的。
并且映射数据的大小只出现在虚拟内存那一列,常驻内存量才反应出有多少数据cached在内存中。
【按照mongodb官方的说法,mongodb完全由系统内核进行内存管理,会尽可能的占用系统空闲内存,用free可以看到,大部分内存都是作为io cache被占用的,而这部分内存是可以释放出来给应用使用的。
】5交互式shellmongo类似于MySQL中的mysql进程,但功能远比mysql强大,它可以使用JavaScript语法的命令从交互式shell中直接操作数据库。
如查看数据库中的内容,使用游标循环查看查询结果,创建索引,更改及删除数据等数据库管理功能。
下面是一个在mongo中使用游标的例子:> for(var cur = db.posts.find(); cur.hasNext();) {... print(tojson(cur.next()));... }输出:{"_id" : ObjectId("4bb311164a4a1b0d84000000"),"date" : "Wed Mar 31 17:05:23 2010","content" : "blablablabla","author" : "navygong","title" : "the first blog"}...其它的documents。