【博学谷学习记录】超强总结,用心分享|【探花交友】MongoDB
目录
MongoDB简介
配置、启动MongoDB
下载MongoDB
常见问题
套娃关系 文档、集合、数据库
文档(小套娃)
集合(中套娃)
mongodb pub/sub方案
数据库(大套娃)
MongoDB简介
MongoDB是一种强大、灵活、可扩展的数据存储方式。
MongoDB是面向文档的数据库,不是关系型数据库。它将原来**‘行’(row)的概念换成了更加灵活的‘文档’(document)模型**。面向文档的方式可以将文档和数组内嵌进来,所以用一条记录就可以表示很复杂的层次关系。 MongoDB没有模式,文档的键不会事先定义也不会固定不变。
MongoDB所采用的面向文档的数据模型,使其可以自动的在多台服务器之间分割数据,还可以平衡集群的数据和负载,自动重排文档。
配置、启动MongoDB
下载MongoDB
- 第一步:登上MongoDB官网,找到自己的适合的版本下载
- 第二步:解压(免安装),改名mongodb(举例命名,可以任个人喜好),放在你喜欢的位置(任喜好)
- 第三步:通过命令行:
- cd mongodb(进入mongodb目录)
- cd bin(进入bin目录)
- ./mongod(运行启动命令)
- 如果看到有错误莫担心,咱慢慢往下读
常见问题
- mongodb默认的数据目录为/data/db,如果这个目录不存在或者不可写,服务器会启动失败
- 解决方案:mkdir -p /data/db,手动创建目录,并确保有写权利
- 还有可能27017端口被占用,什么意思呢?就是你已经启动了./mongod了,没有关闭,所以端口占用了,因为mongodb的默认端口为27017
- 解决方案:另打开命令行,输入ps -A,查看./mongod的PID(进程号),找到后输入 kill -15 PID。
- 还有可能是需要在sudo下才能执行
- 依然要再bin目录下,输入sudo ./mongod
在启动MongoDB时,输入./mongod的后面可以跟其他的配置参数,不配置即为默认,在网上可以找到相应的详细讲解配置的博客
成功后,咱另打开个命令行,依然是bin目录下,输入./mongo,启动MongoDB shell,在shell里输入help,可以查看具体方法,这里就不概述了。
套娃关系 文档、集合、数据库
文档(小套娃)
文档是MondoDB的核心概念,多个键及其关联的值有序的存放在一起便是文档。可以非常类似关系型数据库里的“行”。
在JavaScript里,文档对象通常长这个样子:
{"greeting":"Hello world"}
在MongoDB里可能会长这样:
{"greeting":"Hello world","foo":3} {"foo":"3","greeting":"hello world"}
当然,MongoDB里的文档通常会更加的复杂,不过,这里咱们有必要注意几点:
- 文档中的键/值对是有序的,所以上下两个文档是不同的 文档的键是字符串,而值不仅可以使字符串,也可以是其他几种类型的值
- 文档的值不仅可以使字符串,也可以是其他几种类型的值
- 文档的键:
- 不能有\0(因为它表示结尾)
- .和$在特定环境下使用,因为它们是保留字
- 以“_”为开头的键是保留的
- MongoDB不但区分类型,还区分大小写。两个foo的值是不同的,一个数字,一个字符串,两个greeting的键也是不同的(H和h)
集合(中套娃)
集合就是一组文档,非常类似于关系型数据库里的表。 集合的特点就是无模式,就是说一个集合里可以放各种各样的不同文档。 那么随之来的问题是:“有必要使用多个集合吗?” 答案当然是有啦(暗暗一笑),下面是一些理由
- 把各种文档都存放在一个集合里,太乱!
- 因为乱,所以你一旦需要查询某键的时候,就会太慢!
- 将同类的文档放在一个集合里,逻辑上更合理
- 索引是按照集合来创建的,将同类的东西放入文档可以提高索引的效率
举例
超市里都是把同类的商品放在一起贩卖;数学上也有名为“合并同类项”的方法。
总结
集合是为了更有逻辑的分类不同类型的文档,使得MongoDB的效率提高。
mongodb pub/sub方案
基于mongodb的capped collections和tailable cursor实现发布和订阅的功能。
Capped collections是唯一一种维持插入顺序的集合,其中,如果达到容量最大值,那么就会覆盖第一个元素,也就是说capped collection的行为类似于一个环形队列。一种特殊的cursor类型,称为tailable cursor,可以被用在capped collection上,当完成结果返回时,这种cursor不会关闭,而是会继续等待更多的结果来返回。也就是说如果有新的记录插入到capped collection的话,cursor会自动返回。
注意:
Capped collections创建后就不能改变了,如果需要修改固定集合的属性,只能将其删除之后再重建。因此,在创建固定集合前应该考虑好它的大小。
对于collections的数据考虑设置一个过期时间,或者采取某种措施来删除已经消费掉的数据。
子集合
通过用"."来按命名空间划分子集合。如: blog有两个集合posts和authors,可以这样:blog.posts,blog.authors
命名
- 不能是空字符串""
- 不能含有\0,(表示结尾)
- 不能以system开头
- 不能有保留字$
数据库(大套娃)
命名
- 不能是空字符串""
- 不能含有\0 . \ / $ ''(空格)
- 全部应该小写
注意
有一些数据库名是保留的,如:admin、local、config
【博学谷学习记录】超强总结,用心分享|【探花交友】MongoDB相关推荐
- [博学谷学习记录]超强总结,用心分享|第07节 常用的API-----笔记篇
目录 1.API 1.1 API概述-帮助文档的使用 1.2 键盘录入字符串 2. String类 2.1 String概述 2.2 String类的构造方法 2.4 创建字符串对象的区别对比 2.5 ...
- {博学谷学习记录} 超强总结,用心分享|狂野架构师-前置互联网架构演变过程
本章以系统架构,数据架构,两种维度来进行讲解 目录 1 系统架构 1,1 单体架构 1.2 中台战略 2 数据库架构 2,1 单体架构 2.2 主从读写 2.3 分库分表 3 总结 1 系统架构 1, ...
- [博学谷学习记录]超强总结,用心分享|架构 Nacos入门
提示:学习笔记 欢迎指点 文章目录 前言 一.Nacos安装 二.Nacos服务注册与发现 1.服务提供者Provider 2.服务消费者Consumer 三.Nacos作为配置中心 前言 Nacos ...
- [博学谷学习记录]超强总结,用心分享|架构 敏捷 - 开发管理之道
提示:学习笔记 欢迎指点 文章目录 1.敏捷开发思想之道 2.面向对象开发之道 3.敏捷学习之道 1.敏捷开发思想之道 一名敏捷开发者,敏捷思想的掌握自然首当其冲.在敏捷开发实施的过程中,我们虽然不是 ...
- [博学谷学习记录]超强总结,用心分享|第16节 集合续-----笔记篇
目录 1.HashSet集合 1.1HashSet集合概述和特点[应用] 1.2HashSet集合的基本应用[应用] 1.3哈希值[理解] 1.4哈希表结构[理解] 1.5HashSet集合存储学生对 ...
- [博学谷学习记录] 超强总结,用心分享|陌陌综合案例
注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flin ...
- [博学谷学习记录]超强总结,用心分享|Hive的压缩格式
压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAULT .gz 否 bzip2 bzip2 bzip2 .bz2 是 ...
- [博学谷学习记录]超强总结,用心分享|软件测试之计算机基础(一)
本周开始学习软件测试,而我也即将开始在平台记录我的学习之路.我会把我的个人心得及掌握的知识发布在此平台,俗话说最好的输入就是输出,希望在输出的同时能有更多的收获,也希望与大家多多交流. 为了更好的学习 ...
- [博学谷学习记录]超强总结,用心分享|人工智能机械学习基础知识线性回归总结分享
1.线性回归的核心是参数学习,线性回归和回归方程(函数)有关 2.线性回归是目标值预期是输入变量的线性组合 3.欠拟合的产生原因是学习到数据的特征过少 4.多元线性回归中的"线性" ...
- [博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(1wk)
学习笔记目录 目录 学习笔记目录 前言 一.变量 1. 关键字:被java赋予特殊含义的字符 2. 常量:不会发生改变的量(数据)编辑 3. 变量:内存中的存储空间. 4. 类型转换 5. 算术运算 ...
最新文章
- [architecture]-armv8-aarch64种的SIMD/FP指令介绍
- HDU4405(概率DP求期望)
- Groovy里使用CountDownLatch
- python为何排名越来越前_为何python现在越来越多的人在用了?
- 人工智能工程师需具备的技能_2020年软件测试工程师需要具备的技能--需要学什么--面试题有哪些(灵魂拷问)...
- java 线程池 复用机制,java的线程池框架及线程池的原理
- endnote无法同步原因_endnote不能同步(endnote retrieving references)的解决方法
- c语言的详细编译过程
- opencv+python机读卡识别
- 将“早期版本的Windows”改名
- 计算机一级考试试题难不难,计算机一级考试通过率是多少 考试难吗
- 蓝桥杯 ALGO-45 算法训练 调和数列问题
- 不服不行,太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
- Log4j写日志文件使用详解
- 巧学活用html4,巧用教材、活用教材
- 联想微型计算机怎么调暗屏幕,演示一下联想一体机调节屏幕亮度的详细步骤!...
- win10的IE闪退及“启用或关闭windows功能”里没有IE选项
- [转] 一篇好文 ---steve jobs (stay hungry, stay foolish)
- 做个小推广-风景优美的旅游胜地
- Java 占用CPU使用率很高的分析