NoSQL
NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是 SQL”。
NoSQL 是指非关系型数据库,用于超大规模的数据管理,这类数据不需要存储不需要固定的格式,无需多与操作就能横向扩展
MongoDB
介绍
MongoDB 属于 NoSQL 数据库的一种,是 C++编写的基于分布式文件存储的开源数据库系统
类型 | 部分代表 | 特点 |
---|---|---|
列存储 | Hbase |
Cassandra
Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的 IO 优势。 |
| 文档存储 | MongoDB
CouchDB | 文档存储一般用类似 json 的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。 |
| key-value 存储 | Tokyo Cabinet / Tyrant
Berkeley DB
MemcacheDB
Redis | 可以通过 key 快速查询到其 value。一般来说,存储不管 value 的格式,照单全收。(Redis 包含了其他功能) |
| 图存储 | Neo4J
FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
| 对象存储 | db4o
Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
| xml 数据库 | Berkeley DB XML
BaseX | 高效的存储 XML 数据,并支持 XML 的内部查询语法,比如 XQuery,Xpath。 |
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value),组成,MongoDB 文档类似于 JSON 对象,字段值可以包含其他文档、数组、文档数组
主要
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB 不支持 | |
primary key | primary key | 主键,MongoDB 自动将_id 字段设置为主键 |
对比一下:
MongoDB 安装
kali 上安装运行出现 *段错误 *未解决
ubuntu 上一次性成功
mongodb-linux-x86_64-3.0.6.tgz
1 | tar -xvzf mongodb-linux-x86_64-3.0.6.tgz //解压 |
在 mongodb 目录下创建目录 data/db ,以及/log 目录
1 | mkdir data //创建data目录 |
系统 profile 配置,配置环境,这是每装一个软件的必备步骤,在 profile 文件最后面添加环境变量
1 | vi /etc/profile |
保存后,重启系统配置
1 | source /etc/profile |
在 mongodb 目录下创建 conf 目录,并创建 mongodb.conf 配置文件
1 | cd /usr/local/mongodb/ //切换到mongodb |
配置一些信息在 mongodb.conf 中:
1 | dbpath = /usr/local/mongodb/data/db #数据文件存放目录 |
###
一些准备好,启动服务
1 | cd /usr/local/mongodb/ //切换到mongodb |
连接 mongodb
1 | cd /usr/local/mongodb/bin |
停止服务
1 | cd /usr/local/mongodb/bin |
参考:
https://www.jianshu.com/p/d8f471bdfa3b
基础命令
创建数据库:use database_name,如果有直接拿来用,没有会自动创建 use yichen
删除数据库:db.dropDatabase()
先 use 再删除
创建集合(相当于 mysql 中的表):db.createCollection('hack')
删除集合:db.hack.drop()
查看集合用的是:show tables
或者 show collections
插入数据:db.yichen.insert({'name':'yichen'})
插入数据用逗号隔开:
1 | db.writeup.insert({name:'yichen', |
也可以先把数据定义为一个变量再插入到文档里
更新:db.writeup.update({name:'yiyichen'},{$set:{name:'y1chen'}})
会把 name 为 yiyichen 的 name 改为 y1chen
pretty() 可以更加美观的显示结果
移除文档:db.writeup.remove({'name':'y1chen'})
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 范例 | RDBMS 中的类似语句 |
---|---|---|
等于 | db.col.find({"by":"菜鸟教程"}).pretty() |
where by = '菜鸟教程' |
小于 | db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
and 条件(多个条件用逗号隔开):db.writeup.find({key1:value1, key2:value2}).pretty()
or 条件:db.writeup.find({$or:[{"name":"yichen"},{"name": "yiyichen"}]}).pretty()