一、NoSQL简介

    NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库 。是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

  关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

(一)常见的NoSql(非关系型数据库)数据库

CouchDB
Redis
MongoDB
Neo4j
HBase
BigTable

(二)NoSql数据库优缺点

1、优势方面:

简单的扩展
快速的读写
低廉的成本
灵活的数据模型

2、不足方面:
不提供对SQL的支持
支持的特性不够丰富
现有的产品不够成熟

二、MongoDB和关系数据库的对比

三、MongoDB基本概念

(一)文档

 文档是MongoDB的核心、基本数据单元,类似于JS中的JSON对象,由多个key-value构成,但是支持更多的数据类型。多个键以及相关的值有序的放置在一起便是文档。在大多数编程语言中都是使用多个key-value的形式,java中是map,Python中是字典,JavaScript中是对象。

(二)集合

集合就是一组文档,如果说文档类似于关系数据库中的行,那么集合就是表

集合是无模式的(模式的概念参见模式的意义)。一个集合中的文档可以是任意类型的,也就是说文档是可以任意组合的。

问题:集合存在的意义

  • 虽然集合中可以保存任意类型的文档组合,但是如果不妥善的组织、分类文档的保存,那么不利于数据的分类管理。
  • 在一个存放多种不同类型的集合里面查询特定类型的文档在速度上不划算,最好是每种类型文档分别存在不同的集合中,加快查询速度。
  • 把同类数据放在同一个集合,保证数据聚合性。
  • 同时,同类的文档放在同一集合中可以提高索引的有效性。

1、集合的命名

  • 和key一样不能有空字符串
  • 不能以"system."开头,不能含有"$"
  • 一个集合的完全限定名:数据库名.集合(子集合)名称,例如cms.blog.posts

2、子集合

在MangoDB中最常用的组织集合的方式就是子集合,也就是使用:命名空间名.集合名 来定义集合名称,这样做的目的只是为组织结构更好。

3、集合的访问

访问集合我们一般使用db.集合名的方式,但是当集合的名称恰好是数据库属性名时,这种方式就无法得到集合,只能使用:db.getCollection('集合名')的方式得到集合。同时,由于JS中,x.y等价于x['y'],所以可以用后边一种方式访问数据。

(三)数据库

MangoDB中最基本的存储单元是文档,文档组成集合,集合组成数据库。一个MangoDB实例可以承载多个数据库,数据库之间完全独立。一般情况下,一个应用对应一个数据库,类似于关系数据库中的外模式。

1、命名

数据库的名称最终会变成系统的文件名称。

  • 不能是空字符串
  • 不得含有空格、点、斜杠与反斜杠以及空字符串。
  • 应该全部小写
  • 最多64字节2

2、系统默认数据库

MangoDB系统中和传统的关系数据库一样都会有一些初始化的数据库保存数据库系统运行信息。

  • Admin

root库。一些特定的服务器端命令只能从这个库运行。

  • Local

local库中的集合永远都不会被复制,用于存储不准备分布式保存的、只保存在本地(单服务器)的集合。

  • Config

当MangoDB用于分片设置时,config库在内部使用,用于保存分片相关的配置信息。

四、MongoDB数据类型

五、MongoShell

mongoShell是用于与mongodb交互的工具,类似于navicat、sql/plus等数据库交互工具。所以mongoShell在启动前必须先启动mongodb(使用mongodbHome/bin/mongod启动mongodb实例)。而mongoshell其实就一个强大的javascript解释器(使用mongodbHome/bin/mongo启动mongoshell解释器)。可以再MongoShell中声明函数、调用JS标准库函数、声明变量等,进行JS开发。

(一)MongoShell中操作的简单说明

创建--insert

语法:数据库.集合.insert(文档)

说明:insert是将某些数据、文档插入到mongodb中,一般是以JS对象或者JS中的表示法来描述对象。

读取--find

语法:数据库.集合.find()/数据库.集合.findOne()

说明:find是将文档从数据库、集合中查找出来,可以接受查询文档形式的限定条件。

更新--update

语法:数据库.集合.update(目标更新文档的限定条件,新的文档)

说明:update用于将mongodb中的某个文档内容更新,接受两个参数,第一个是文档限定对象,第二个是新对象

删除--remove

语法:数据库.集合.remove([文档限定对象])

说明:remove用于删除文档,当remove没有参数的时候删除集合中所有的文档,如果有参数,那么删除参数限定的文档对象。

参考资料:《MongoDB权威指南》

NoSql数据库MongoDB系列(1)——MongoDB简介的更多相关文章

  1. NOSQL学习笔记系列之MongoDB 一 基础

    主题:MongoDB 学习资料参考网址: 1.http://www.w3cschool.cc/mongodb/mongodb-tutorial.html 2.http://www.icoolxue.c ...

  2. NoSql数据库Redis系列(1)——Redis简介

    一.redis介绍 (一).Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点 ...

  3. mongodb系列之--mongodb 主从配置与说明

    一.为什么要配置mongodb的主从: 1.做主从,可以说是做数据的备份,有利于故障的恢复 2.做主从,可以做到读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性. ...

  4. 13.MongoDB系列之分片简介

    1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...

  5. Mongodb系列之--mongodb的启动与关闭

    Mongodb的开启   默认启动:   $ ./mongodb   默认数据保存路径:/data/db/ 默认端口:27017   修改默认路径:   --dbpath $ ./mongdb --d ...

  6. NoSql数据库Redis系列(4)——Redis数据持久化(AOF)

    上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严 ...

  7. NoSql数据库Redis系列(3)——Redis数据持久化(RDB)

    大家都知道 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库 ...

  8. NoSql数据库Redis系列(2)——Redis数据类型

    一.设计 Redis Key (一).分段设计法 使用冒号把 key 中要表达的多种含义分开表示,步骤如下: 1.把表名转化为 key 前缀 2.主键名(或其他常用于搜索的字段) 3.主键值 4.要存 ...

  9. NoSql数据库Redis系列(6)——Redis数据过期策略详解

    本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存sessi ...

  10. NoSql数据库Redis系列(5)——Redis主从复制

    前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都 ...

随机推荐

  1. 从零开始学虚拟DOM

    此文主要翻译自:Building a Simple Virtual DOM from Scratch,看原文的同学请直达! 此文是作者在一次现场编程演讲时现场所做的,有关演讲的相关资料我们也可以在原英 ...

  2. 绘图 Matplotlib Numpy Pandas

    丈夫气力全,一个拟当千.猛气冲心出,视死亦如眠. 绘图 Matplotlib可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法. 能将数据进行可视化,更直观的呈现使数据更 ...

  3. [daily] ssh通过私钥导出公钥

    在使用key方式登录ssh服务的时候,我们知道ssh key是使用公钥ssh-keygen工具生成的. 有时候,我们只保存了私钥,但是并没有保存公钥.这个时候,可以使用如下方法,   从私钥中将公钥导 ...

  4. springboot错误: 找不到或无法加载主类

    一:当在eclipse启动spring boot项目时出现问题: springboot错误: 找不到或无法加载主类 解决办法: 1,通过cmd命令行,进入项目目录进行,mvn clean instal ...

  5. python抽象基类

    抽象基类 抽象基类提了一种方式,用以组织对象的层次结构,做出关于所需方法的断言,以及实现其他一些功能 要定义抽象基类,需要使用abc模块,该模块定义了一个元类(ABCMeta) 和一组装饰器(@abs ...

  6. 云计算---记一次黑客攻击openstack创建的虚拟机

    一:问题定位 现象: 近期发现有几台openstack云主机被修改密码并被肉鸡. 黑客操作日志: -- :: ##### root tty1 : #### -- :: top -- :: ##### ...

  7. CH6401 创世纪

    6401 创世纪 0x60「图论」例题 描述 上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i].现在,上帝要把它们中的 ...

  8. win32gui.EnumWindows

    python2 import win32gui, win32con, win32api import time, math, random def _MyCallback( hwnd, extra ) ...

  9. 重新打包rpm包

    1.安装rpmrebuild 和安装rpmbuild rpmrebuild下载链接: https://sourceforge.net/projects/rpmrebuild/files/rpmrebu ...

  10. 3、HDFS架构和YARN架构

    HDFS 架构图 HDFS 服务功能 NameNode NameNode是主节点,存储文件的元数据如文件名,文件目录,文件属性(生成时间.副本数.文件权限),以及每个文件的块列表和块所在的DataNo ...