文章目录
1.MongoDb的概念
MongoDB是由 C++语言编写的,有自己强大的查询语法的一个基于分布式文件存储的开源数据库系统。
1、一个mongodb实例可以创建多个数据库
2、一个数据库可以创建多个集合
3、一个集合可以包括多个文档
应用场景
a) 网站数据:mongo 非常适合实时的插入,更新域查询,并具备网站实时的数据存储所需的复制及高度伸缩 性。
b) 缓存:由于性能很高,mongo 也适用作为信息基础设施的缓存层。在系统重启之后由 mongo 搭建的持久 化缓存可以避免下层的数据源过载。
c) 大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较贵,在此之前,很多程序员 往往会选择传统的文字进行存储。
d) 高性伸缩的场景:mongo 非常适合由数十或者数百台服务器组成的数据库。
e) 用于兑现及 JSON 数据的存储:mongo 的 BSON 数据格式非常适合文档格式化的存储及查询。
f) 重要数据:mysql,一般数据:mongodb,临时数据:memcache
g) 对于关系型数据库而言,mongodb 提供了一个更快速的视图 view;而对于 java 程序而言,mongodb 可以 作为 u 一个持久化的数组来使用,并且这个持久化的数组还可以支持排序、条件、限制等功能。
h) 将 mongo 代替 mysql 的部分功能,主要一个思考点就是:把 mongodb 当作 mysql 的一个 view(视图) 如 mongodb 经常用于评论系统。针对评论这样数据量大并且价值不高的数据,我们通常采用 MongoDB 来实 现存储。
2 MongoDB的优缺点
优点:
1) 弱一致性(最终一致),更能保证用户的访问速度。
2) 文档结构的存储方式,能够更快捷的获取
3) 内置 GridFS,高效存储二进制大对象(比如照片和视频)
4) 支持复制集、主备、互为主备、自动分片等特性
5) 动态查询
6) 全索引支持,扩展到内部对象和内嵌数组
缺点:
1) 不支持事务
2) MongoDB 占用空间过大,维护工具不够成熟
3为什么要在MongoDB中使用分析器
mongodb 中包括了一个可以显示数据库中每个操作性能特点的数据库分析器.
通过这个分析器你可以找到 比预期慢的查询(或写操作);
利用这一信息,比如,可以确定是否需要添加索引.
4为什么MongoDB的数据文件很大?
MongoDB 采用的预分配空间的方式来防止文件碎片
5 mongodb与mysql的区别?
mongodb 的本质还是一个数据库产品,它与 mysql 的区别在于它 不会遵循一些约束,
比如:sql 标准、ACID 属性,表结构等。
面向集合文档的存储:适合存储 Bson(json 的扩展)形式的数据;
格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;
强大的查询语句,面向对象的查询语言,基本覆盖 sql 语言所有能力;
完整的索引支持,支持查询计划;
支持复制和自动故障转移;
支持二进制数据及大型对象(文件)的高效存储;
使用分片集群提升系统扩展性;
使用内存映射存储引擎,把磁盘的 IO 操作转换成为内存的操作
6 GirdFS是什么?工作原理是什么?如何使用?
GridFS 是 MongoDB 提供的用于持久化存储文件的模块,它可以作为分布式文件系统使用,
CMS子系统将页面文件、模板文件存储到 GridFS 中,
由于本项目使用 MongoDB,选用 GridFS 可以快速集成开发。
它的工作原理是: 在 GridFS 存储文件是将文件分块存储,文件会按照 256KB 的大小分割成多个块进行存储,
GridFS 使用两个集合(collection)存储文件,一个集合是 chunks, 用于存储文件的二进制数据;
一个集合是files,用于存储文件 的元数据信息(文件名称、块大小、上传时间等信息)。
从 GridFS 中读取文件要对文件的各各块进行组装、 合并
7数据库表设计过吗,怎么设计
1 每张表都具备id这个属性,而随着系统越做越大,id则会越来越多,
所以他的类型应设为bigint(也可以是Long),长度设为20
2 是否启用(bool类型的东西)、类型(type),状态(state)类型应设为tinyint,长度设为1,一般设个默认值0
3 创建时间(createtime)应设为datetime类型,数据库也是有date类型,
而我们用datetime而不用date的原因是datetime有时分秒,而date
4 普通的varchar类型字段建议设置默认值为null(empty string)
5 手机号可以使用char类型,因为手机号都是固定13位的,用char可以节省空间
6 对于内容字数比较多的时候你就不能使用varchar了,应该改用text类型
7 一对多关系一般都是主从表,一个主表可以对应着多个从表,也就是说他们需要关联字段(id),
分别在主表和从表里加上他们的关联字段就好,没有建关联表的必要。
8 多对多关系的话,则必须要建立关联表,把两张甚至多张表关联起来,
根据aid查询多个bid,再拿这多个bid来用,反过来也是,用bid查询多个aid,
就可以拿到这多个aid来用,用的意思就是增删改查及批量增删改查