随着你们对大数据的整合,分析。mongodb 的使用愈来愈多。主要体如今分布式架构中。javascript
把数据分配在多台服务器上的程序,称为分布式。<br>java
couchdb mongodb redis voldmort oracle cassandra hbase riak neo4j infogridmysql
关系型数据库为 数据库,表, 行 redis
mongodb 数据结构为 数据库,集合,文档sql
事务支持 MongoDB 目前只支持单文档事务,须要复琐事务支持的场景暂时不适合mongodb
灵活的文档模型 JSON 格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代数据库
高可用复制集 知足数据高可靠、服务高可用的需求,运维简单,故障自动切换json
可扩展分片集群 海量数据存储,服务能力水平扩展服务器
高性能 mmapv一、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持知足各类场景需求数据结构
强大的索引支持 地理位置索引可用于构建 各类 O2O 应用、文本索引解决搜索的需求、TTL索引解决历史数据自动过时的需求
Gridfs 解决文件存储的需求
aggregation & mapreduce :解决数据分析场景需求,用户能够本身写查询语句或脚本,将请求都分发到 MongoDB 上完成
只有清楚数据类型才更方便使用
mongodb 中文档已bson 结构存储,bson (binary json)是一种相似json的二进制存储格式,可是bson 有json没有的一些数据类型。好比 Date 和 binData。
bson 中 value 类型包含: double string object array binData objectId bool date null regex javascript javascriptWithScope int timestamp long
建立数据库 use testDB;
建立文档 db.createCollection("account");
文档的CURD
db.collection.find(); db.collection.insert(); db.collection.insertMany(); db.collection.update(); db.collection.remove(); db.collection.deleteMany();
单一索引 覆盖索引 惟一索引,复合惟一索引 稀疏索引 特殊索引 固定集合 循环游标 TTL锁引 全文索引 地理索引
建立惟一索引
db.coll.ensureIndex({"email":1},{"unique":true})
建立索引语法,字段,和boolean值,上面的例子,建立email索引同时,添加了惟一的约束。
Time to live ,生命周期索引。 能够设置 文档的生命周期 只能针对 日期类型字段上设置一个过时时间。秒为单位,好比设置过时时间 3600 s。那么mongo每秒检查一次数据,发现时间大于3600s。就经过索引找到数据,对该条数据进行删除。
db.log_events.createIndex( { "createTime": 1 }, ---字段名称 { expireAfterSeconds: 60*60 } ) ---过时时间(单位秒)
db.createCollection("capped_coll2", { capped : true, size : 1000, max : 5 } )
必须三个参数同时存在,否则虽然返回成功,但是 db.capped_coll2.isCapped(); 会发现不是固定集合。 Size 集合大小,单位字节,max 最多的条数。 当集合中数据满之后。新插入的文档会替换最老的文档,适合作log或者排行榜展现数据。
explain 关键字分析索引
db.products.explain("allPlansExecution").update( { quantity: { $lt: 1000}, category: "apparel" }, { $set: { reorder: true } } )
会输出查询分析器的执行状况,方便分析将执行的语句
db.products.explain("executionStats").find( { quantity: { $gt: 50 }, category: "apparel" } ).sort( { quantity: -1 } ).hint( { category: 1, quantity: -1 } )
将强制先使用 category索引,后使用quantity索引