大致看了一点 MongoDB. 回忆一下,这个数据库有这样一些特征:

  • Schema-less: 不需要预先定义 schema. 数据以 document 的方式存储,document 大致上相当于关系数据库中的一行记录。document 存放在 collection 中间(相当于关系数据库的 table)。document 里的每个 field 都可以建索引。
  • MongoDB 的特性使得它和面向对象编程语言之间的 gap 比较小。不像关系数据库那样需要 OR Mapping 来减轻编程的困难程度。比如,在C#中将对象序列化,即可调用 MongoDB 保存之。
  • Schema-less 的特性并非鼓励将所有不想干的对象都放到一个大垃圾堆里(同一个collection)。而是为了提供灵活性。在大多数情况下,存储模型/结构的设计方法和关系数据库没有太大的不同,只是在少数地方有所区别,如多对多关系。
  • document 可以内嵌 document. 就像 JSON 对象可以嵌套一样。
  • 一般的设计场景鼓励通过适当的冗余字段来定义 document 的存储结构,而非 normalized 的 ER 关系。不支持 join 的语法。
  • 多对多关系可以通过内嵌 document 来存储多个关联 id 的数组来实现。系统能对数组进行高效率的查找。
  • 和数据库的所有操作接口基本都通过 JavaScript / JSON 的语法来调用。
  • 查找记录通过指定 selector 来实现。查询返回的结果只是游标(cursor),而非直接返回结果。可以附加 order(), count() 等串接调用(估计内部也是通过 MapReduce 实现的)。
  • update 命令默认是覆盖整个记录的模式,就是说并非仅更新指定的字段,而是将其他老的字段信息也抹掉。如果需要实现 sql 类似的按需更新字段的行为需要指定多余的参数。
  • 支持 upsert 操作,含义是:存在则更新,否则插入。
  • document 可以有任意的属性集合。同一个 collections 里面可以存放具有不同 field 的 document. 在运行时刻可以向已有的 document 附加属性。
  • 对事务的支持不如传统的关系数据库。有2个办法:(1) 利用一些本身支持的原子操作来实现简单的事务。比如 $inc, $set. (2) 将事务对数据记录的影响结果预先计算出来,通过二段式的提交(2-phase commit)来实现。比较麻烦。
  • 全文索引:支持简单的方案。复杂的方案需要通过和 Lucene/Solr 配合来实现。
  • MapReduce 基本原理及支持:
    • 至少需要提供一个 map function, 一个 reduce function.
    • map 用于产生键值对;reduce 用于对键值对进行聚合操作。
    • 键值对可以被并行处理(多个CPU,多个机器,。。。),所以 reduce 函数的特征是返回值也必须符合输入的键值对格式,这样才便于任务的拆分和调度。

转载于:https://www.cnblogs.com/RChen/archive/2011/04/07/2007375.html

MongoDB 初学相关推荐

  1. mongodb 初学 意外 连接服务器异常(Connection refused)

    啦啦啦 这种情况 root@localhost:/# mongo MongoDB shell version: 3.2.13 connecting to: test 2017-05-31T07:40: ...

  2. mongodb的安装以及客户端

    mongodb是一种非关系型的数据库,与传统的sql有很大的不同,但都是用于数据管理的,本人也是初学,很多地方都是模仿,在这里只是记录本人初次安装mongodb和客户端,记录一下安装的步骤,以便以后用 ...

  3. java web开发初学_2018年学习Web开发的绝对初学者指南

    java web开发初学 This post was originally published on Coder-Coder.com. 该帖子最初发布在Coder-Coder.com上 . If yo ...

  4. 总结—什么妖引起的MongoDB副本集初始化失败?

    前言: 在之前搭建MongoDB集群中,遇到过一些小问题作妖引起的初始化副本集失败,初学至今踩过来的坑,在此做个小结. 1.IP错误引起MongoDB副本集初始化失败 这个错误在另一篇文章已经描述过, ...

  5. python mongodb 异步_【转】Python操作MongoDB数据库

    前言 MongoDB GUI 工具 PyMongo(同步) Motor(异步) 后记 前言 最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 MongoDB 吧,,走起 ...

  6. mongodb查询不带表名_原创 | MongoDB常用指令

    库的操作 1. 查看数据库列表 show dbs: 2. 查看当前数据库 db 3. 新建一个表 db.createCollection('要新建的表名') // 返回结果// {"ok&q ...

  7. python脚本迁移数据库_Python迁移MySQL数据到MongoDB脚本

    MongoDB是一个文档数据库,在存储小文件方面存在天然优势.随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录. 一.场景:线上MySQL数据库某表迁移到Mong ...

  8. 【转】Python操作MongoDB数据库

    前言 MongoDB GUI 工具 PyMongo(同步) Motor(异步) 后记 前言 最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 MongoDB 吧,,走起 ...

  9. mongodb添加多条数据_Python 数据库骚操作 -- MongoDB

    我的旧文章,搬运过知乎 前言 MongoDB GUI 工具 PyMongo(同步) Motor(异步) 后记 前言 最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 M ...

最新文章

  1. Matlab学习笔记——图形绘制
  2. linux集群无密码访问,Linux服务器集群通过SSH无密码登录
  3. Java实现图片去噪和灰度的类
  4. 限制部分Postfix用户只能内部收发的例子(完整版)
  5. 《Windows Phone 8 Development Internals》读书笔记-1-1-连载
  6. 区块链中的基础数据结构
  7. java套接字数据对不上,服务器不从多个客户端(Java套接字)接收数据
  8. vs2013 c++代码内出现中文导致编译错误
  9. 域外计算机无法连接远程桌面,如何开启域内计算机的远程桌面连接?
  10. 分水岭算法 c语言实现,分水岭算法的应用
  11. 特斯拉又撞“人”了 汽车激光雷达“盛宴”开启
  12. VSS 2005 使用详解
  13. “假离婚、真套现” 解禁潮将至 拉卡拉上演“一出好戏”
  14. 新服务器或者vps如何挂载硬盘(安装硬盘)教程
  15. 诚之和:元宇宙的“诸神之战” 风口还是风险
  16. [音乐下载] [115永久续期] 最终心跳回忆。。。(11G)
  17. 数位 dp 相邻位数字差值的绝对值不能超过 2_干货来了!13种行测数字推理技巧总结...
  18. 最全的Google黑客技巧介绍
  19. 计算机频谱仪仿真,频谱分析仪模拟仿真.doc
  20. Node.js(一)——(Node.js安装及使用,通过Node.js搭建服务器,模块化及自定义模块,npm/yarn/nvm,内置模块fs的使用,buffer及stream,新闻列表案例)

热门文章

  1. android adb 开机广播,Android中常用的adb指令
  2. mysql or全表_mysql or条件可以使用索引而避免全表
  3. mysql in partition_MySQL Partition分区扫盲
  4. .写一个方法 void printScore(int score),输出相应的等级。score代表分数,等级格式如下:
  5. python 横坐标旋转,python 横坐标旋转
  6. 量子计算机模型机,物理科学:量子计算机上实现了量子人工生命模型!
  7. leetcode590. N叉树的后序遍历
  8. leetcode57. 插入区间
  9. 22种编程语言新年快乐
  10. 一个简单的游戏服务器框架 .