mongodb梳理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zengxiaosen/article/details/83029884

下面做mongodb特性等简单梳理:

mongodb的界面管理工具

nosql manager for mongodb

mysql为例的关系型数据库

mongodb对应的非关系形数据库

bson是二进制的json

//查询某一集合下所有的数据

db.students.find();

//往某一个集合中添加数据

db.users.insert({"uName":"zhangsan","age":30,"gender":"nan"});

//查询时以一种漂亮的格式显示

db.users.find().pretty();

//分页查询

db.books.find();

//books接中总共有5条数据,每页现实2条,可以分三页

//如果是mysql,就是select * from books limit 起始页码,每页显示的数据量

//第一页

db.books.find().skip(0).limit(2);

//第二页

db.books.find().skip(2).limit(2);

//带条件的查询

db.books.find({});//查询所有

//select * from books where price=19.9

db.books.find({"price":19.9});

//select * from books where bookName='xxx' and price = xxx

db.books.find({"price":19.9,"bookName":"Mybatis从入门到精通"});

//or 或

//select * from books where bookName='xxx' or bookName='xxx' or ...

db.books.find({$or[{"bookName":"Mybatis从入门到精通"},  {"bookName":"Mysql从删库到跑路"},   {...}    ]});

//<($lt)

db.books.find({"price":  {$lt:69.9} });

//<=($lte)

db.books.find({  "price":{$lte:69.9}  });

//>($gt)

db.books.find({  "price": {$gt:69.9}  });

//>= ($gte)

db.books.find({"price":{$gte:69.9}});

//!=()

db.books.find({"price":{$ne:69.9}});

//找出book集合中价格>=39.9并且<=69.9

db.books.find({"price":{$gte:39.9, $lte:69.9 }});

//修改

//update books set price=99.9 where bookName='MySQL从删库到跑路'

db.books.update({"bookName" : "MySQL从删库到跑路"},  {$set:{"price":99.9}});

//删除

db.books.remove({"bookName":"Spring从入门到精通"});

mongodb的一些特性:

1 GridFs:GridFs是一种将大型文件存储在MongoDB中的文件规范。使用GridFS可以将大文件分隔成多个小文件存放,这样我们能够有效的保存大文档,而且解决量BSON对象有限制的问题。

2 存储过程:MongoDB支持存储过程,他是javascript写的,保存在db.system.js表中。

3分片:如果一个分片停止了,除非查询设置了"Partial“选项,否则查询会返回一个错误。如果一个分片响应很慢,MongoDB会等待他的响应。

4索引:如果MongoDB在A:{B, C}上建立索引,查询A:{B,C}上会使用索引,但查询A:{C, B}不会使用索引

5迁移块(chunck)文档发生的变化:更新操作会立即发生在旧的块(chunk)上,然后更改才会在所有权转移前复制到新的分片上。

6chunk移动的重试:如果块移动操作(moveChunck)失败了,是不需要手动情处部分转移的文档的。因为转移操作是一致的(consistent)并且是确定的(deterministic),一次失败后,移动操作会不断重试,数据只会出现在新的分片里(shard)

7查看Mongo正在使用的连接:db._adminCommand("connPoolStats");

8关于moveChunck目录里的就文件删除:是可以删除的,这些文件是在分片(shard)进行均衡操作(balancing)的时候产生的临时文件。一旦这些操作已经完成,相关的临时文件也应该被删除掉。但目前清理工作是需要手动的,所以请小心地考虑再释放这些文件的空间。

9数据扩展到多个分片(shard)里的时机:mongodb分片是基于区域(range)的。所以一个集合(collection)里的所有对象都被存放到一个块(chunck)中。只有在多余一个块的时候,才会有多个分片获取数据的选项。现在每个默认块的大小是64Mb,所以你需要至少64Mb空间才可以实施一个迁移。

10分片(sharding)和复制(replication)的工作原理:每一个分片(shard)是一个分区数据的逻辑集合。分片可能由单一服务器或者集群组成,我们推荐为每一个分片(shard)使用集群。

11数据累增:刚开始应该以非集群分片(unsharded)方式开始一个mongodb环境,除非一台服务器不足以存放初始数据集。从非集群分片升级到集群分片(sharding)是无缝的,所以在数据集还不是很大的时候没必要考虑集群分片(sharding)

12数据文件通常比较大,因为mongodb会积极的预分配预留空间来防止文件系统碎片。

13mongodb没有使用传统的锁或者复杂的带回滚的事务,因为他涉及的宗旨是轻量,快速以及可预计的高性能。可以把它类比成mysql myisam的自动提交模式。通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿过多个服务器的系统里。

14关于空值null,对于对象成员而言,是允许null的。然而用户不能够添加空值(null)到数据库从集(collection),因为空值不是对象。然而用户能够添加空对象{}

15如果用户移除对象的属性,属性会从存储层中删除,用户移除属性然后对象会重新保存(re-save())

16更新操作不会立刻fsync到磁盘,磁盘写操作默认是延迟执行的。写操作可能在两三秒(默认在60秒内)后到达磁盘。例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次。

17名字空间(namespace)mongodb存储bson对象在从集(collection)中。数据库名字和丛集名字以句点连接起来叫做名字空间(namespace)

18分析器的作用:mongodb中包括了一个可以显示数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到比预期慢的查询(或写操作),利用这一信息,比如,可以确定是否需要添加索引。

总之,mongodb成为较好的nosql数据库,是因为他有很多优点,比如面向文件,高性能,高可用性,易扩展性,丰富的查询语言等。

猜你喜欢

转载自blog.csdn.net/zengxiaosen/article/details/83029884