您的位置:首页 > 数据库 > Mongodb

基于分布式文件存储的数据库---MongoDB

2017-12-27 11:55 585 查看

基于分布式文件存储的数据库—MongoDB

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

—>MySQL与MongoDB的操作对比,以及区别<—

MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL(全称Structured Query Language)语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。

MySQL

关系型数据库。

在不同的引擎上有不同 的存储方式。

查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。

开源数据库的份额在不断增加,mysql的份额页在持续增长。

缺点就是在海量数据处理的时候效率会显著变慢。

Mongodb

非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

存储方式:虚拟内存+持久化。

查询语句:是独特的Mongodb的查询方式。

适合场景:事件的记录,内容管理或者博客平台等等。

架构特点:可以通过副本集,以及分片来实现高可用。

数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

优势

I 快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快.

II 高扩展!

III 自身的Failover机制!

IV json的存储格式!

缺点

I 不支持事务(进行开发时需要注意,哪些功能需要使用数据库提供的事务支持)

II MongoDB占用空间过大 (不过这个确定对于目前快速下跌的硬盘价格来说,也不算什么缺点了)

III MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方

IV 在32位系统上,不支持大于2.5G的数据(很多操作系统都已经抛弃了32位版本,所以这个也算不上什么缺点了,3.4版本已经放弃支持32 位 x86平台)

mongodb以BSON结构(二进制)进行存储,对海量数据存储有着很明显的优势。下面是Mongodb与Mysql的操作命令的对比。

作用MysqlMongoDB
服务器守护进程mysqldmongod
客户端工具mysqlmongo
逻辑备份工具mysqldumpmongodump
逻辑还原工具mysqlmongorestore
数据导出工具mysqldumpmongoexport
数据导入工具sourcemongoimport
新建用户并授权grant all on * . * to username@’localhost’ identified by ‘passwd’;db.addUser(“user”,”psw”) db.auth(“user”,”psw”)
显示库列表show databases;show dbs
进去库use dbname;use dbname
显示表列表show tables;show collections
查询主从状态show slave status;rs.status
创建库create database name;无需单独创建,直接use进去
创建表create table tname(id int);无需单独创建,直接插入数据
删除表drop table tname;db.tname.drop()
删除库drop database dbname;首先进去该库,db.dropDatabase()
插入记录insert into tname(id) value(2);db.tname.insert({id:2})
删除记录delete from tname where id=2;db.tname.remove({id:2})
修改/更新记录update tname set id=3 where id=2;db.tname.update({id:2},{$set:{id:3}},false,true)
查询所有记录select * from tname;db.tname.find()
查询所有列select id from tname;db.tname.find({},{id:1})
条件查询select * from tname where id=2;db.tname.find({id:2})
条件查询select * from tname where id < 2;db.tname.find({id:{$lt:2}})
条件查询select * from tname where id >=2;db.tname.find({id:{$gte:2}})
条件查询select * from tname where id=2 and name=’steve’;db.tname.find({id:2,name:’steve’})
条件查询select * from tname where id=2 or name=’steve’;db.tname.find(:[{id:2},{name:’steve’}])
条件查询select * from tname limit 1;db.tname.findOne()
模糊查询select * from tname where name like “%ste%”;db.tname.find({name:/ste/})
模糊查询select * from tname where name like “ste%”;db.tname.find({name:/^ste/})
获取表记录数select count(id) from tname;db.tname.count()
获取有条件的记录数select count(id) from tname where id=2;db.tname.find
4000
({id:2}).count()
查询时去掉重复值select distinct(last_name) from tname;db.tname.distinct(‘last_name’)
正排序查询select *from tname order by id;db.tname.find().sort({id:1})
逆排序查询select *from tname order by id desc;db.tname.find().sort({id:-1})
取存储路径explain select * from tname where id=3;db.tname.find({id=3}).explain()
mongodb与mysql命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。

php操作MongoDB

Mongodb安装mongodb参考路径 http://www.jb51.net/article/97428.htm

(可到mongodb官网http://www.mongodb.org/downloads下载安装包—也可联系YF792655113微信要)

MongoDB安装到windows服务的方法及配置环境变量参考路径 http://www.jb51.net/article/97422.htm

注:操作之前要安装php版本相对应的mongodb扩展

class mongodbtest{

/*
查找
*/
public function show(){
$manager = $this->connect();
$filter = array();

$options = array();
// 查询数据
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('test.message', $query);    //test是库   message是集合(表)
foreach($cursor as $document)
{
$object[] =  json_decode( json_encode($document),true);

}
return $object;

}
/*
添加
*/
public function add(){

$manager = self::connect();
$bulk = new MongoDB\Driver\BulkWrite;
$data = ['id' => 1, 'name'=>'魑魅魍魉', 'password' => 'happy'];
$bulk->insert($data);
$manager->executeBulkWrite('test.message', $bulk);   //test是库   message是集合(表)

return $manager;
}

/*
修改
*/
public function update(){

$manager = self::connect();

$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
['id' => 2],   //条件
['$set' => ['name' => '魑魅魍魉','password'=>'happy',"url"=>"http://www.baidu.com"]],      //修改内容
['multi' => false, 'upsert' => false]
);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('test.message', $bulk, $writeConcern);   //test是库   message是集合(表)

return $result;
}
/*
删除
*/
public function del(){

$manager = self::connect();
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->delete(['id' => 1], ['limit' => 0]);   // limit 为 1 时,删除第一条匹配数据
// $bulk->delete(['x' => 1], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('test.message', $bulk, $writeConcern);   //test是库   message是集合(表)

return $result;
}

/*
连接mongodb
*/
public function connect(){
$manager = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");   //连接数据库
return $manager;
}
}


cmd操作MongoDB

mongodb作为非关系型数据库(NoSql),它的可以由以下的结构组成,文档,集合,数据库。

其中mongodb的基本单元是文档,这类似于关系型数据库中的行,但从深处将,文档又比行要复杂的多。文档的格式类似于javascript中的json对象类型,如果你有 json的基础,mongodb对你来说,不会显得太陌生。文档是由多个键值有序的组合在一起

集合类似关系型数据库中的表,多个文档组成集合,但是与关系型数据库不同的是,文档中的键值对是可以随意排放的,也就是说,集合中的文档是可以任意去设置的,这取决于你的需要,不过相信应该没有人会将不同的数据放到一个集合里面。

最后呢,多个集合又组成了数据库。OK,现在是不是很明白了,mongodb并不像想象中的那么难以理解,如果真是那样,开发者还开发mongodb做什么。下面说一些cmd下对mongodb的操作:

1 首先要确保服务已经开启–(开启mongodb服务)



net start mongodb;


2 进入Mongodb



现在就已经链接成功了,之后就是对mongodb进行的一系列操作。

3 查看数据库列表



show dbs;


4 选择数据库

如果要选择数据库,就如同mysql一样。



在这里需要说的是,use既可以使用既有的数据库,又可以新建另一个名称的数据库,打个比方,如果我的mongodb实例中没有db的数据库,但是通过 use db,会新建一个名称为db的空白数据库。(上)

在此通过db命令可以查看现在所选择的db (下)

use dbs;
db;


5 添加集合



注:data是集合名字

6 查看数据库下的集合



7 查看集合下所有元素



db.data.find();


注:data是集合名字

8 添加元素



db.data.insert({"id":"2","name":"gxt","sex":"女"});


注:data是集合名字

9 修改元素

语法 db.collection.update( criteria, objNew, upsert, multi )

参数说明: Criteria:用于设置查询条件的对象 Objnew:用于设置更新内容的对象 Upsert:如果记录已经存在,更新它,否则新增一个记录 Multi:如果有多个符合条件的记录,全部更新 注意:默认情况下,只会更新第一个符合条件的记录。



db.data.update({"id":"1"},{$set:{name:"wyf"}},0,1);


10 删除元素



db.data.remove({"name":"wyf"});


这只是一部分比较基础的,当然mongodb还有很多聚合用法,详情请参考https://www.cnblogs.com/xiangxiaodong/archive/2013/01/13/2858363.html

9e37
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 mongodb