目录

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会自动返回。

注意:

  1. Capped collections创建后就不能改变了,如果需要修改固定集合的属性,只能将其删除之后再重建。因此,在创建固定集合前应该考虑好它的大小。

  2. 对于collections的数据考虑设置一个过期时间,或者采取某种措施来删除已经消费掉的数据。

子集合

通过用"."来按命名空间划分子集合。如: blog有两个集合posts和authors,可以这样:blog.posts,blog.authors

命名

  • 不能是空字符串""
  • 不能含有\0,(表示结尾)
  • 不能以system开头
  • 不能有保留字$

数据库(大套娃)

命名

  • 不能是空字符串""
  • 不能含有\0 . \ / $ ''(空格)
  • 全部应该小写

注意

有一些数据库名是保留的,如:admin、local、config

【博学谷学习记录】超强总结,用心分享|【探花交友】MongoDB相关推荐

  1. [博学谷学习记录]超强总结,用心分享|第07节 常用的API-----笔记篇

    目录 1.API 1.1 API概述-帮助文档的使用 1.2 键盘录入字符串 2. String类 2.1 String概述 2.2 String类的构造方法 2.4 创建字符串对象的区别对比 2.5 ...

  2. {博学谷学习记录} 超强总结,用心分享|狂野架构师-前置互联网架构演变过程

    本章以系统架构,数据架构,两种维度来进行讲解 目录 1 系统架构 1,1 单体架构 1.2 中台战略 2 数据库架构 2,1 单体架构 2.2 主从读写 2.3 分库分表 3 总结 1 系统架构 1, ...

  3. [博学谷学习记录]超强总结,用心分享|架构 Nacos入门

    提示:学习笔记 欢迎指点 文章目录 前言 一.Nacos安装 二.Nacos服务注册与发现 1.服务提供者Provider 2.服务消费者Consumer 三.Nacos作为配置中心 前言 Nacos ...

  4. [博学谷学习记录]超强总结,用心分享|架构 敏捷 - 开发管理之道

    提示:学习笔记 欢迎指点 文章目录 1.敏捷开发思想之道 2.面向对象开发之道 3.敏捷学习之道 1.敏捷开发思想之道 一名敏捷开发者,敏捷思想的掌握自然首当其冲.在敏捷开发实施的过程中,我们虽然不是 ...

  5. [博学谷学习记录]超强总结,用心分享|第16节 集合续-----笔记篇

    目录 1.HashSet集合 1.1HashSet集合概述和特点[应用] 1.2HashSet集合的基本应用[应用] 1.3哈希值[理解] 1.4哈希表结构[理解] 1.5HashSet集合存储学生对 ...

  6. [博学谷学习记录] 超强总结,用心分享|陌陌综合案例

    注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flin ...

  7. [博学谷学习记录]超强总结,用心分享|Hive的压缩格式

    压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAULT .gz 否 bzip2 bzip2 bzip2 .bz2 是 ...

  8. [博学谷学习记录]超强总结,用心分享|软件测试之计算机基础(一)

    本周开始学习软件测试,而我也即将开始在平台记录我的学习之路.我会把我的个人心得及掌握的知识发布在此平台,俗话说最好的输入就是输出,希望在输出的同时能有更多的收获,也希望与大家多多交流. 为了更好的学习 ...

  9. [博学谷学习记录]超强总结,用心分享|人工智能机械学习基础知识线性回归总结分享

    1.线性回归的核心是参数学习,线性回归和回归方程(函数)有关 2.线性回归是目标值预期是输入变量的线性组合 3.欠拟合的产生原因是学习到数据的特征过少 4.多元线性回归中的"线性" ...

  10. [博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(1wk)

    学习笔记目录 目录 学习笔记目录 前言 一.变量 1. 关键字:被java赋予特殊含义的字符 2. 常量:不会发生改变的量(数据)​编辑 3. 变量:内存中的存储空间. 4. 类型转换 5. 算术运算 ...

最新文章

  1. [architecture]-armv8-aarch64种的SIMD/FP指令介绍
  2. HDU4405(概率DP求期望)
  3. Groovy里使用CountDownLatch
  4. python为何排名越来越前_为何python现在越来越多的人在用了?
  5. 人工智能工程师需具备的技能_2020年软件测试工程师需要具备的技能--需要学什么--面试题有哪些(灵魂拷问)...
  6. java 线程池 复用机制,java的线程池框架及线程池的原理
  7. endnote无法同步原因_endnote不能同步(endnote retrieving references)的解决方法
  8. c语言的详细编译过程
  9. opencv+python机读卡识别
  10. 将“早期版本的Windows”改名
  11. 计算机一级考试试题难不难,计算机一级考试通过率是多少 考试难吗
  12. 蓝桥杯 ALGO-45 算法训练 调和数列问题
  13. 不服不行,太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
  14. Log4j写日志文件使用详解
  15. 巧学活用html4,巧用教材、活用教材
  16. 联想微型计算机怎么调暗屏幕,演示一下联想一体机调节屏幕亮度的详细步骤!...
  17. win10的IE闪退及“启用或关闭windows功能”里没有IE选项
  18. [转] 一篇好文 ---steve jobs (stay hungry, stay foolish)
  19. 做个小推广-风景优美的旅游胜地
  20. Java 占用CPU使用率很高的分析

热门文章

  1. Xcode一种涉及到多桌面的调试技巧
  2. 数学作文计算机,数学日记作文
  3. 【提高测试】飘雪圣域(树状数组)
  4. 如何使用 win32com 操作excel 入坑
  5. Maya打开.obj模型并为其贴图
  6. google又可以访问了
  7. MacBook Air和MacBook Pro到底选哪款?
  8. acrobat启动慢 adobe,为什么Adobe Acrobat滚动如此缓慢,我该怎么办?
  9. 诸暨软件测试,诸暨市2017年中考体育测试项目测试规范及评分标准
  10. 以油菜花产量预测为例子——ARIMA模型excel落地