MongoDB 初学

大致看了一点 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL中的set/map

std::set/std::map底层实现的机制是红黑树,树中的数据是有序的,那么进行插入、删除、查找时的平均时间复杂读O(logN),以2为低的对数N。set相当于map中的key,map中的key不能有重复的并且按升序进行排序,如果结构体作为map中的key&a…

IoC容器Autofac(3) - 理解Autofac原理,我实现的部分Autofac功能(附源码)

上篇文章中,举了一个Autofac的简单例子,园友eflay反应: “虽然对autofac架构原理还是完全不懂,不过基本是明白ioc的用途了,会从已注册的类中找出符合接口的类来调用构造函数进行构造” 所以这篇文章,还是针对上次的例子…

STATS 4014 Advanced Data Science

STATS 4014Advanced Data ScienceAssignment 3Jono TukeSemester 1 2019CHECKLIST: Have you shown all of your working, including probability notation where necessary? : Have you given all numbers to 3 decimal places unless otherwise stated? : Have you include…

铁血规则:事件预订与取消预订

在编码的时候,我们经常预订某个事件来处理它,但很少取消事件的预订,这种做法可能导致程序在运行时出现一些异常。 如果你的某个用于处理事件的对象不是在运行期内永久存在的(比如,不是Singleton对象)&#…

MySQL中的insert ignore into讲解

最近工作中,使用到了insert ignore into语法,感觉这个语法还是挺有用的,就记录下来做个总结。 insert ignore into : 忽略重复的记录,直接插入数据。 包括两种场景: 1、插入的数据是主键冲突时 insert ignore into…

[置顶] 我的iOS作品

我的iOS作品 罗朝辉 ( http://blog.csdn.net/kesalin)CC 许可,转载请注明出处前言 做了好几年的 iOS 开发了,业余也零零散散地写了不少代码和博文教程。可惜一直都没有整理下,上次过年回家在张江广兰路把笔记本给丢了,损失惨重&am…

SSM框架搭建

SSM(SpringSpringMvcMybatis)项目环境搭建: 1、项目环境: jdk-1.8 tomcat-9.0 mysql-5.1.44 spring 5.1.6 mybatis 3.5.1 maven 3.5.42、项目目录结构: 3、pom.xml中引入的依赖&#xf…

MySQL字段值大小写敏感的解决方案

最近在用开源的MySQL 8.0开发本公司的产品,在客户现场建表时默认使用的是CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci 字符集导致与oracle的结果不一致,最后将建表时的字符集改为utf8mb3就可以了。 正常建表如下,默认使用的是CHARSETutf8mb4 …

制作Slider组件

利用as3,我们可以尝试制作一些有趣的组件,虽然现在已经有很多实用的组件,但是自己尝试写一下也是不错的。利用as3语法,借用了绘图Api我们尝试制作一下这个组件。因为我们不需要很强大的功能,对此我们只是需要选取其一部…

Android 编程下的四大组件之服务(Service)

服务(Service) 是一种在后台运行,没有界面的组件,由其他组件调用开始。Android 中的服务和 Windows 中的服务是类似的东西,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。 服务&#xf…

mysql ld preload过程

纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注。 导读 本文将叙述通过二进制源码方式安装Percona-5.7.15,并进行快速启动。这边如何使用二进制版本安装Percona-5.7.15就不说了,和之前一模一样。 不做多余的事 1、解…

第六章实验报告(函数和宏定义实验)

C程序设计实验报告 一、实验项目: 1、编写由三角形三边求面积的函数 2、编写求N阶乘的函数 3、求两个整数的最大公约数 4、打印输出三角形 5、求500以内的所有亲密数对 姓名:廖云福 实验地点:教学楼514教室  实验时间:2019.4.30 一、实验目…

HttpRequest 与HttpWebRequest 有什么区别

System.Web.HttpRequest是封装浏览器对服务器的请求的,主要用在ASP.NET中,其中包括浏览器请求的网址,查询字符串数据或表单数据等等 而System.Net.HttpWebRequest则是用来简化网络请求的过程,从服务器上获取文件/结果的&#xff0…

mysqld_safe启动脚本源码阅读与分析

原文链接:https://blog.csdn.net/weixin_39844426/article/details/113422137 前几天读了下mysqld_safe脚本,个人感觉还是收获蛮大的,其中细致的交代了MySQL数据库的启动流程,包括查找MySQL相关目录,解析配置文件以及…

统计文章中字母出现频率

代码位置:https://github.com/Evilleon/article-vocabulary/letter转载于:https://www.cnblogs.com/YXSZ/p/10809930.html

mapreduce shuffle过程问答

通过hadoop权威指南学习hadoop,对shuffle过程一直很疑惑,经过查看网上多个帖子,最终 完成此篇问答总结。 1.什么叫shuffle 从map任务输出到reducer任务输入之间的过程就叫做shuffle 2.每个map任务都有对应的缓存吗?默认是多少&…

Oracle为JDK 8寻求社区参与

据InfoQ报道,随着Java 7功能的日益完备,Oracle正在将注意力转向JDK 8,Java平台组的首席架构师Mark Reinhold正在寻求Java社区的参与: 我们已经知道JDK 8中会有一些大家伙,同时也会为其他大大小小的特性留下空间。因此需…

ubuntu下安装pt-query-digest

最近在改造开发MySQL时要使用pt-query-digest工具分析性能问题,一路遇到了一些问题,记录下来便于日后翻看。 系统: #45~20.04.1-Ubuntu SMP Mon Apr 4 09:38:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 在安装过程中遇到了很多的问题&#…

S2-016、S2-017

前言 由于S2-016、S2-017出现的原因时相同的,只是由于poc不一样,造成了不同的攻击。S2-016是RCE,S2-017是开发型重定向漏洞。这里将两个漏洞放一起分析。另外“Struts2系列起始篇”是我整各系列的核心,希望大家能花些时间先看看。…

struts 2 配置通配符

2019独角兽企业重金招聘Python工程师标准>>> 随着Web应用程序的增加,所需的Action也会更多,从而导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样…