教育机构网站是,提高网站排名软件,青岛网站设计哪家便宜,聊城做网站的网络公司NoSQL NoSQL(NoSQL Not Only SQL)#xff0c;意即反SQL运动#xff0c;指的是非关系型的数据库 优点
1、对数据库高并发读写。
2、对海量数据的高效率存储和访问。
3、对数据库的高可扩展性和高可用性。
弱点#xff1a;
1、数据库事务一致性需求
2、数据库的写实时性…NoSQL NoSQL(NoSQL Not Only SQL)意即反SQL运动指的是非关系型的数据库 优点
1、对数据库高并发读写。
2、对海量数据的高效率存储和访问。
3、对数据库的高可扩展性和高可用性。
弱点
1、数据库事务一致性需求
2、数据库的写实时性和读实时性需求
3、对复杂的SQL查询特别是多表关联查询的需求
简介
MongoDB 是由C语言编写的是一个基于分布式文件存储的开源数据库系统。
它支持的数据结构非常松散数据格式是BSON一种类似 JSON的二进制形式的存储格式简称Binary JSON 和JSON一样支持内嵌的文档对象和 数组对象因此可以存储比较复杂的数据类型。
Mongo最大的特点是它支持的查询语言非常强大其语法有点类似于面向对象的查询语言几乎可以实现类似关系数据库单表查询的 绝大部分功能而且还支持对数据建立索引。 原则上 Oracle 和 MySQL 能做的事情MongoDB 都能做包括 ACID 事务。
MongoDB术语与SQL术语对比 MongoDB与关系型数据库性能对比 特点
半结构化
在一个集合中文档所拥有的字段并不需要是相同的而且也不需要对所用的字段进行声明。因此MongoDB具有很明显的半结构化特点。除了松散的表结构文档还可以支持多级的嵌套、数组等灵活的数据类型非常契合面向对象的编程模型。
弱关系
MongoDB没有外键的约束也没有非常强大的表连接能力。类似的功能需要使用聚合管道技术来弥补
支持海量数据、高可用
复制集提供99.999%高可用 分片架构支持海量数据和无缝扩容 轻松支持TB-PB数量级
应用场景
游戏场景使用 MongoDB 存储游戏用户信息用户的装备、积分等直接以内嵌文档的形式存储方便查询、更新 物流场景使用 MongoDB 存储订单信息订单状态在运送过程中会不断更新以MongoDB 内嵌数组的形式来存储一次查询就能将订单所有的变更读取出来 社交场景使用 MongoDB 存储存储用户信息以及用户发表的朋友圈信息通过地理位置索引实现附近的人、地点等功能 物联网场景使用 MongoDB 存储所有接入的智能设备信息以及设备汇报的日志信息并对这些信息进行多维度的分析 视频直播使用 MongoDB 存储用户信息、礼物信息等 大数据应用使用云数据库MongoDB作为大数据的云存储系统随时进行数据提取分析掌握行业动态。|
是否使用MongoDB判断
只要有一项需求满足就可以考虑使用MongoDB匹配越多选择MongoDB越合适。
安装
#拉取镜像 docker pull mongo:latest
#创建和启动容器 docker run -d --restartalways -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
#进入容器 docker exec -it mymongo/bin/bash
#使用MongoDB客户端进行操作 mongo show dbs #查询所有的数据库 admin 0.000GB config 0.000GB local 0.000GB 相关工具
官方GUI工具——COMPASS
MongoDB图形化管理工具(GUI)能够帮助您在不需要知道MongoDB查询语法的前提下便利地分析和理解您的数据库模式,并且帮助您可视化地构建查询。 下载地址https://www.mongodb.com/zh-cn/products/compass
Mongo shell
使用js
load(books.js)var tags [nosql,mongodb,document,developer,popular];
var types [technology,sociality,travel,novel,literature];
var books[];
for(var i0;i50;i){var typeIdx Math.floor(Math.random()*types.length);var tagIdx Math.floor(Math.random()*tags.length);var favCount Math.floor(Math.random()*100);var book {title: book-i,type: types[typeIdx],tag: tags[tagIdx],favCount: favCount,author: xxxi};books.push(book)
}
db.books.insertMany(books);优化手段
索引
B树索引。 MongoDB支持多种索引类型包括
单键索引Single Key Index只对一个字段进行索引。在MongoDB中默认创建的_Id索引就是单键索引。 复合索引Compound Index对多个字段进行索引。例如如果经常需要根据两个或更多字段进行查询那么创建复合索引可以提高查询效率。 多键索引Multikey Index针对数组或嵌套文档的字段进行索引。多键索引会为数组的每个元素建立一条索引允许在数组或嵌套文档字段上进行查询。 地理空间索引Geospatial Index对包含地理坐标的字段进行索引以支持地理位置相关的查询。 文本索引Text Index对文本字段进行全文索引以支持文本搜索和自然语言查询。
使用聚合管道
MongoDB支持聚合管道操作可以将多个操作合并成一个操作以减少网络通信和磁盘IO。例如可以使用聚合管道来实现分页查询将排序、投影和分页操作合并成一个操作。
在MongoDB中可以使用聚合管道来实现自定义条件搜索、排序、投影和分页。
以下是一个示例假设你有一个books集合你希望根据某些条件搜索书籍
然后根据某个字段例如rating进行排序只返回你感兴趣的字段并将其分页。以下是具体的代码示例javascript
const mongoose require(mongoose);
const Book mongoose.model(Book, new mongoose.Schema({ name: String, rating: Number })); // 定义搜索条件
const searchCondition { name: /search keyword/ }; // 定义聚合管道
const pipeline []; // 添加匹配操作
pipeline.push({ $match: searchCondition
}); // 添加排序操作
pipeline.push({ $sort: { rating: -1 } // 按 rating 字段降序排序
}); // 添加投影操作
pipeline.push({ $project: { _id: 1, // 包含 _id 字段 name: 1, // 包含 name 字段 rating: 1 // 包含 rating 字段 }
}); // 添加分页操作
const skip (page - 1) * limit; // 计算跳过的数量
pipeline.push({ $skip: skip
});
pipeline.push({ $limit: limit // 假设 limit 是每页的数量
}); // 执行聚合查询
Book.aggregate(pipeline, function(err, results) { if (err) throw err; console.log(results);
});
在这个例子中$match操作符用于满足自定义搜索条件
$sort操作符用于排序$project操作符用于投影$skip和$limit操作符用于分页。
请注意$skip和$limit的使用顺序很重要因为$skip必须在$limit之前
否则无法得到正确的结果。使用数据分片
MongoDB支持数据分片可以将数据分布到多个服务器上以提高性能和可用性。例如可以将用户数据按照地理位置进行分片将用户数据分布到不同的服务器上这样查询时就会更快
使用副本集
MongoDB支持副本集可以提高数据的可用性和性能。例如可以将读操作分发到副本集中的从节点上以减轻主节点的负载。
定期删除不再使用的数据