NoSQL和MongoDB简单介绍

作者 张旭 日期 2017-02-09
NoSQL和MongoDB简单介绍

什么是NoSQL?

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

为什么使用NoSQL ?

今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。

RDBMS vs NoSQL

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语言(SQL) (SQL)
  • 数据和关系都存储在单独的表中。
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务
    NoSQL
  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
    -键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID属性
  • 非结构化和不可预知的数据
  • CAP定理
  • 高性能,高可用性和可伸缩性

Mongodb 安装

下载

解压

tar -zxvf mongodb-linux-x86_64-ubuntu1604-3.4.2.tgz

将解压文件放到一个合适地方,

mkdir -p mongodb
cp -R -n mongodb-linux-x86_64-3.4.2/ mongodb
Note:注意要有正确的读写权限

设置环境变量

为了是mongodb命令能在任意文件夹下执行
add the following line to your shell’s rc file (e.g. ~/.bashrc)

export PATH=/bin:$PATH
source ~/.bashrc

创建数据存放文件夹(注意权限)

mkdir -p /data/db

启动mongodb 服务器

可以添加子命令,如IP,端口,数据文件位置
mongod

使用

可以添加子命令,如IP,端口,数据文件位置

mongo

MongoDB 概念解析











































SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins 表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

Figure-1-Mapping-Table-to-Collection-1.png


## 数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为”db”,该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
“show dbs” 命令可以显示所有数据的列表。
## 文档
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
RDBMS 与 MongoDB 对应的术语:








































RDBMSMongoDB
数据库数据库
表格集合
文档
字段
表联合嵌入文档
主键主键 (MongoDB 提供了 key 为 _id )
数据库服务和客户端
Mysqld/Oraclemongod
mysql/sqlplusmongo

需要注意的是:

  1. 文档中的键/值对是有序的。
    文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  2. MongoDB区分类型和大小写。
  3. MongoDB的文档不能有重复的键。
  4. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

集合

集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
比如,我们可以将以下不同数据结构的文档插入到集合中:

{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.runoob.com","name":"菜鸟教程","num":5}
{'name': '菜鸟教程', 'num': 5, 'site': 'www.runoob.com'}

元数据

数据库的信息是存储在集合中。它们使用了系统的命名空间:

集合命名空间

描述

dbname.system.namespaces

列出所有名字空间。

dbname.system.indexes

列出所有索引。

dbname.system.profile

包含数据库概要(profile)信息。

dbname.system.users

列出所有可访问数据库的用户。

dbname.local.sources

包含复制对端(slave)的服务器信息和状态。


MongoDB 数据类型

下表为MongoDB中常用的几种数据类型。

数据类型

描述

String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean布尔值。用于存储布尔值(真/假)。

Double双精度浮点值。用于存储浮点值。

Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。

Arrays用于将数组或列表或多个值存储为一个键。

Timestamp时间戳。记录文档修改或添加的具体时间。

Object用于内嵌文档。

Null用于创建空值。

Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID对象 ID。用于创建文档的 ID。

Binary Data二进制数据。用于存储二进制数据。

Code代码类型。用于在文档中存储 JavaScript 代码。

Regular expression正则表达式类型。用于存储正则表达式。

参考 http://www.runoob.com/mongodb/mongodb-databases-documents-collections.html