基于分布式文件存储的数据库---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的操作命令的对比。
作用 | Mysql | MongoDB |
---|---|---|
服务器守护进程 | mysqld | mongod |
客户端工具 | mysql | mongo |
逻辑备份工具 | mysqldump | mongodump |
逻辑还原工具 | mysql | mongorestore |
数据导出工具 | mysqldump | mongoexport |
数据导入工具 | source | mongoimport |
新建用户并授权 | 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() |
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
- Mongodb 基于分布式文件存储的数据库
- MongoDB 基于分布式文件存储的开源数据库
- MongoDB 一个基于分布式文件存储的数据库
- 一个基于分布式文件存储的数据库MongoDB
- MongoDB 基于分布式文件存储的数据库
- MongoDB一个基于分布式文件存储的数据库(介于关系数据库和非关系数据库之间的数据库)
- MongoDB一个基于分布式文件存储的数据库(介于关系数据库和非关系数据库之间的数据库)
- 分布式文件存储的数据库开源项目MongoDB
- 分布式文件存储的数据库开源项目MongoDB
- GridFS:基于MongoDB的分布式文件存储系统
- 分布式文件存储的数据库开源项目MongoDB
- GridFS:基于MongoDB的分布式文件存储系统
- 基于mongoDB和C#分布式海量文件存储实验
- 分布式文件存储数据库--MongoDB
- 基于mongoDB和C#分布式海量文件存储实验
- GridFS:基于MongoDB的分布式文件存储系统
- 基于Mongodb进行分布式数据存储
- 数据存储之SQLite -- 如何查看数据库文件(基于AS开发工具)
- 分布式文档存储数据库 MongoDB