Node中的MongoDB
文章目录
- Node中的MongoDB
- 1. NoSQL数据库简介
- 2. 什么是MongoDB
- 2.1 为什么使用MongoDB
- 2.2 MongoDB特点
- 3. 安装MongoDB
- 4.MongoDB基本命令
- 5. MongoDB可视化工具
- 6. Node使用Mongoose操作MongoDB HelloWorld
1. NoSQL数据库简介
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
2. 什么是MongoDB
MongoDB 是一个基于分布式文件存储的数据库,可以说是介于关系型数据库与非关系型数据库之间的Nosql数据库
2.1 为什么使用MongoDB
(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
{
username:'123',
password:'123'
}
使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
---------------------
作者:hello_锦泰
来源:CSDN
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!
2.2 MongoDB特点
(1)文档数据类型
SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
(2)即时查询能力
MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。
(3)复制能力
MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
(4)速度与持久性
MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
(5)数据扩展
MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
---------------------
作者:hello_锦泰
来源:CSDN
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!
3. 安装MongoDB
下载地址:https://www.mongodb.com/download-center/community
安装步骤:傻瓜式操作,一直next
4.MongoDB基本命令
文档:http://www.runoob.com/mongodb/mongodb-tutorial.html
5. MongoDB可视化工具
MongoBooster
下载地址:https://nosqlbooster.com/
使用教程:
6. Node使用Mongoose操作MongoDB HelloWorld
var mongoose = require('mongoose');
var db = mongoose.connection;
//连接失败
db.on('error', console.error.bind(console, 'connection error:'));
//连接成功
db.once('open', function() {
console.log("connection success...");
});
//创建连接
mongoose.connect('mongodb://localhost/test');
var kittySchema = new mongoose.Schema({
name: String
});
//
var Kitten = mongoose.model('Kitten', kittySchema);
var silence = new Kitten({ name: 'Silence' });
//保存
silence.save(function (err) {
if(!err){
console.log("save success...");
}
})
//查询name=Silence
// Kitten.find({name:'Silence'},function (err,docs) {
// if(!err){
// console.log(JSON.stringify(docs));
// }
// })