memcached KV缓存
redis KV缓存
1.mongodb 文档数据库,存储的是文档(Bjson>json的二进制化)
mongodb是在磁盘上分配一块空间,将该空间格式化成gridft格式,在该空间存储json格式文档,为了介绍存储量,将json以二进制的形式存储。
mongodb用chrome V8引擎来解析js。
2.mongodb特点:
内部执行引擎为JS解析器,把文档存储成bson结构,在查询时候转换为JS对象,并可以通过熟悉的JS语法来操作。
mongodb与传统数据库的不同:
传统型数据库:结构化数据,定好了表结构后,每一行的内容,必须符合表结构。
mongodb文档型数据库:表下的每篇文档都可以有自己的独特结构(json对象都可以有自己的属性和值)
思路:如果有电影,影评,影评回复,回复的打分。在传统型数据库中需要多表关联,在文档型数据库中一篇文档就可以完成,
{ frim:"小红帽”, comment:[{ cid:19, contect:"风格与众不同",} {cid:20, rcontect:"支持"}] } ] }
3.mongodb的安装
https://www.mongodb.com/
右上角 Download
解压文件即可,不用编译,本身就是编译后的二进制可执行文件。
bsondump :导出bson结构
mongo:客户端(相当于mysql.exe)
mongod:服务器端(相当于mysqld.exe)
mongodump:整体数据库导出(二进制,相当于mysqldump)
mongoexport:导出易识别的json文档和csv文档。
mongodrestore:数据库整体导出
mongods:路由器分片时用。
4.启动mongod服务
./bin/mongod --bdpath/path/to/database --logpath/path/to/log-file --fork --port 27017
参数解释:
--bdpath:数据库存储目录
--logpath:日志存储文件
--port:运行端口(默认27017)
--fork:要不要在后台运行。
5.mongodb非常的占磁盘空间,
刚启动要占3-4G左右。如果用虚拟机练习,可能空间不够,导致无法启动。
可以用 --smallfiles选项来启动。将会占用较少空间 400M左右。
6.mongo入门命令:
show dbs :查看当前数据库
use databaseName:选库
show tables/collections :查看当前库下的collection
如何建库:
在mysql中用create table ,而在mongodb中隐式创建,你可以use一个不存在的库,然后再该库下创建collection,即可创建库。
db.createCollection("collectionName")创建collection
collection允许隐式创建: db.collectionName.insert(document)
7.mongo基本操作
增:insert
语法:db.collectionName.insert(document);
eg:增加单篇文档
db.sto.insert({"title":"葫芦娃"});
增加单篇文档并增加ID
db.sto.insert({"id":1,"title":"葫芦娃"});
增加多篇文档
db.sto.insert([
{"title":"葫芦娃",age:3},
{"title":"美猴王",age:3},
{"title":"美猴王",age:3}
);
删:remove
语法:db.collectionName.remove(查询表达式,选项)
选项是指(justOne:true/false) true:只删除一行,false:删除所有符合条件的数据
eg:删除一行
db.sto.remove({"title":"美猴王"},true);
删除多行
db.sto.remove({"title":"美猴王"});
改:uodate
改那几行?----- 查询表达式
改成什么样子? -----新值或者赋值表达式
操作选项 -----可选参数
语法:db.collection.update(查询表达式,新增,选项)
db.sto.update({"title":"美猴王"},{"title":"lalala");是指在sto表中,将title=“美猴王”的文档的,将其文档值改成({“title”:“MSN"})
文档中的其他列都不见了,只剩下"id"和"title".因为以文档为单位
修改时候赋值表达式:
$set 修改某列的值
$unset 删除某个列
$rename 重命名某个列
$inc 增长某个列
$setOnInsert 当upset为true时,并且发生了insert操作时,可以补充字段。
option的作用
{upsert:true/false,multi:true/false}
upsert是指没有匹配的行,则直接插入该行。(和mysql的replace一样)
eg:db.sto.update({"name":"wuwuw"},$set:{"name":"lili"}},{upsert:true})
如果有{"name":"wuwuw"}的文档,就被修改成{"name":"lili"}
如果没有,就添加新文档{"name":"lili"}
multi:是指修改多行(默认即使是查询表达式命中多行,也只改一行。如果想改多行,就加multi)。
查:find,findOne
语法:db.collectionName.find(查询表达式,查询列);
db.collections.find(表达式,{列1:1,列2:1});
eg:db.sto.find()
查询所有文档 所有内容。
eg:db.sto.find({},{gendre:1})
查询所有文档的gendre属性(_id属性默认总是查出)
eg:db.sto.find({},{gendre:1,_id:0})
查询所有文档的gendre属性,且不查询_id属性
eg:db.sto.find({gendre:"male"},{name:1,_id:0})
查询所有文档的gendre属性值为male的文档中的name属性。