当前位置: 首页 > 编程日记 > 正文

MongoDB(3)--有关NoSQL及MongoDB的一些概念

学习任何东西在没有理解的前提下去背熟一些概念是没有用的,就像只背会了几个概念而没有理解的开发人员去面试是经不住面试官的追问的。前面的两篇对MongoDB做了简单的介绍,能够很快上手,对MongoDB有一个感性的认识。本篇大部分内容来自MongoDB权威指南和MongoDB实战。希望在学习完整个MongoDB后能对本篇的内容有一个全新的认识。

NoSQL简介

NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库。这类数据库主要有这些特点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模 web  应用,这场全新的数据库革命运动早期就有人提出,发展至2009 年趋势越发高涨。NoSQL 的拥护者们提 倡运用非关系型的数据存储,通常的应用如:模式自由、支持简易复制、简单的API、最终 的一致性 (非ACID )、大容量数据等。NoSQL 被我们用得最多的当数 key-value 存储,当然还 有其他的文档型的、列存储、图型数据库、xml 数据库等。相对于目前铺天盖地的关系型数 据库运用,这一概念无疑是一种全新思维的注入。

NoSQL的优势

同关系型数据库相比,NoSQL有下面的一些优势:

  • 适合对数据库高并发读写的需求。
  • 适合对海量数据的高效率存储和访问的需求。
  • 适合对数据库的高可扩展性和高可用性的需求。

由于NoSQL的这些优势,使得NoSQL比较适合以下的一些场景的使用:

  • 对数据库事务一致性要求不高的时候,因为NoSQL不支持事务(MongoDB是不支持事务的,其他的没做研究)。
  • 对数据库的写实时性和读实时性要求不高的时候。
  • 对复杂的SQL 查询,特别是多表关联查询不多的时候。

NoSQL的特点

  • 它可以处理超大量的数据
  • 它运行在便宜的它运行在便宜的 PC 服务器集群上服务器集群上,意思是在数据库不够用的时候进行PC的集群扩展很方便并且成本很低。
  • 它击碎了性能瓶颈,因为使用NoSQL省去了传统的程序模型到SQL之间转换的时间,执行效率更高。
  • 它没有过多的操作,意思是去掉了很多在关系数据库中拥有而在实际又不怎么使用的功能。
  • 它的支持支持者源于社区者源于社区,所有的NoSQL产品都是开源的。

MongoDB简介

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json  的bjson 格式,简称BSON,因此可 以存储比较复杂的数据类型。MongoDB  最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能, 而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。

MongoDB特点

1 丰富的数据模型 MongoDB是一种面向文档的数据库。在MongoDB中文档就相当于关系型数据库中的行。文档中可以包含很复杂的数据结构,这样一条记录就可以表示很复杂的层级关系。比如说文章表有一个字段是评论,在关系型数据库中我们通常会建一个评论表和文章表做关联,在MongoDB中就可以直接将评论存在一条文章记录的文档中。更符合我们的思维。 MongoDB没有模式,也就是说没有表结构,文档的字段可以随时添加,不会对原来数据有任何影响,使开发变得很容易。 2 容易扩展 在一些大型的网站中,数据的增长是非常惊人的。在面临数据增长机器不够用的时候通常有两种做法:

  • 购买更高配置的机器,会花费很大,而且达到物理极限后花钱也买不到更高配置的了。
  • 进行扩展,将数据分散到多个机器上,这种在操作上会显得复杂点。

MongoDB的设计就考虑到了扩展的问题,它所采用的面向文档的数据模型使得可以自动在多台服务器中切割数据。还可以平衡群集的数据和负载,自动进行文档重排。 3 丰富的功能

  • 索引:MongoDB支持通用辅助索引,可以进行多种快速查询。
  • 存储Javascript:不必再使用存储过程了,可以直接在服务器端存取Javascript的函数和值。
  • 聚合:MongoDB支持MapReduce和其他聚合工具。
  • 固定集合:集合的大小是有上限的,这对于日志一类的数据很有用。
  • 存储文件:MongoDB支持用一种容易使用的协议(GridFS)来存储大型文件。

4 更快的速度 高性能是MongoDB的目标,为了提高性能,就必须进行很多精简的设计,相比关系型数据库少了很多功能,但仍然保持着关系型数据库的众多的特性。一些精简设计表现在:

  • 使用MongoDB传输协议作为与服务器交互的主要方式,将比较HTTP、Reset等可以节省不少开销。
  • 对文档进行动态填充,预分配数据文件,用空间换取时间,而且空间对于现在来说已不是问题。
  • 默认的存储引擎使用内存映射文件,将内存管理工作交给OS去处理。
  • 动态查询优化器会记住执行查询最高效的方式。

5 简单的管理 MongoDB尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外,几乎没有什么管理操作了。如果主服务器挂掉了,MongoDB会自动切换到备份服务器上,并将备份服务器提升为活跃服务器。在分布式的环境下,群集只需要知道有新的节点就会自动集成和配置新的节点。

MongoDB适用场景

  • 网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所 需的复制及高度伸缩性 。
  • 缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后, 由MongoDB 搭建的持久化缓存层可以避免下层的数据源过载 。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储 。
  • 高伸缩性的场景:MongoDB  非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce 引擎的内置支持 。
  • 用于对象及JSON 数据的存储:MongoDB 的BSON 数据格式非常适合文档化格式的存储及查询 。

NoSQL的一些产品

DatabaseArchitectureImplementation Language
HypertableBigtable, Column-orientedC++
HBaseBigtable, Column-orientedJava
CassandraDynamo (with Bigtable data model)Java
MongoDBAuto-shardingC++
RiakDynamo, Key/Value storeErlang
CouchDBDocument-oriented (non-scalable)Erlang
RedisIn-memory, Key/Value storeC
Project VoldemortDynamoJava
Tokyo Cabinet/TyrantKey/Value storeC
DynomiteDynamoErlang
Amazon S3Hosted Key/Value storeJava
Amazon RDSHosted MySQLC

转载于:https://www.cnblogs.com/oec2003/archive/2011/09/29/2741999.html

相关文章:

SpringBootMybatis 关于Mybatis-generator-gui的使用|数据库的编码注意点|各项复制模板...

mysql注意点: 1.有关编码 create table user( id int primary key auto_increment, name varchar(255), password varchar(255) )ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8; 需要加上引擎的注释和默认数据库编码 application.properties的默认写法 #数据源…

【java】兴唐第三十节课之零三知识点总结

1、服务器通过session id来辨别用户 2、绝对路径与相对路径 (1)相对路径 . :当前路径 .. :向上返回一层路径 &#xff08;2&#xff09;绝对路径&#xff1a; 查找所有的文件都是从根目录出发 目录结构如图 代码实现&#xff1a; <div><span><a href …

(续)我对09毕业生说两句

上次写那篇文章已经是09年2月份&#xff0c;转眼2年过去&#xff0c;一直没想好再说些什么。后来想想也不用刻意说些什么&#xff0c;就是闲聊一下我的一些新看法吧。 简 历这个东西很重要&#xff0c;从简历上可以看出很多信息来。有很多人喜欢写自己细致认真。可以从简历上看…

Python Socket请求网站获取数据

Python Socket请求网站获取数据 ---阻塞 I/O ->收快递&#xff0c;快递如果不到&#xff0c;就干不了其他的活 ---非阻塞I/0 ->收快递&#xff0c;不断的去问&#xff0c;有没有送到&#xff0c;有没有送到,...如果送到了就接收 ---I/O多路…

用户控件和服务器控件的数据绑定

一、绑定Repeater控件的数据源 aspx.cs文件中绑定Repeater控件的数据源在BindDataSource()中&#xff1a; protected override void BindDataSource(){ this.rpID.DataSource this.dataList; this.rpID.DataBind();}Repeater控件事件OnItemDataBound&#xff0c;表示在循环…

【jsp】兴唐第三十节课作业

写一个jsp调取数据库的文件显示在主页面&#xff0c;并实现查找、添加、删除和数据更新以及用户登录的功能 stuList.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <% page import "…

Linux命令行好玩的命令

0.cal 2019 #输出日历并显示今天是哪一天 1.命令“date”&#xff0c;显示系统的当前日期和时间&#xff1b; 2.命令“date 040100002016”&#xff0c;屏幕显示新修改的系统时间&#xff1b; #不太明白 3.转载于:https://www.cnblogs.com/Formulate0303/p/11142997.html

Solaris下访问windows共享资源

今在做实验过程中&#xff0c;发现上传软件太费时而且解压起来也繁琐&#xff0c;还要占用很大的空间&#xff0c;就在windows上创建了共享资源&#xff0c;在linux下使用mount挂载上来&#xff0c;直接解压在windows上面&#xff0c;用完了直接将解压的文件删除即可&#xff0…

centOS外部浏览器无法访问tomcat8000端口解决办法

防火墙开放特定端口 &#xff08;iptables&#xff09; 查看状态:iptables -L -n下面添加对特定端口开放的方法&#xff1a;使用iptables开放如下端口/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT保存/etc/rc.d/init.d/iptables save重启服务service iptables resta…

Linux命令行与shell脚本编程大全:第2版

《Linux命令行与shell脚本编程大全:第2版》基本信息作者&#xff1a; (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍]译者&#xff1a; 武海峰丛书名&#xff1a; 图灵程序设计丛书出版社&#xff1a;人民邮电出版社ISBN&#xff1a;9787115288899上架时间&#x…

企业云存储云办公方案

云存储、云计算最近一直被炒得很热&#xff0c;成为了一部分人文档中既神秘又华丽的辞藻&#xff0c;总之来总之去就是"云里来雾里去"&#xff0c;其实"云技术"与历史上的"纳米技术"一词一样忽悠了很多很多的人。云存储是在云计算基础上衍生起来…

【servlete】兴唐第三十二节课知识点汇总

一、 servlet开发&#xff1a; 1、创建java类并继承HttpServlet 2、重写 doGet\doPost方法 3、将Servlet配置到web.xml中&#xff1a; <servlet> <servlet-name>自定义一个唯一的名称</servlet-name> <servlet-class>servlet全类…

悦读上品 得乎益友

悦读上品 得乎益友 ——电子工业出版社2011新年巨献不可复制的《传世经典书从》 孔子云&#xff1a;“取乎其上&#xff0c;得乎其中&#xff1b;取乎其中&#xff0c;得乎其下&#xff1b;取乎其下&#xff0c;则无所得矣。”读书求知&#xff0c;贵在能选择好书中的上品——经…

超详细的Java面试题总结(四 )之JavaWeb基础知识总结

系列文章请查看&#xff1a; 超详细的Java面试题总结&#xff08;一&#xff09;之Java基础知识篇 超详细的Java面试题总结&#xff08;二&#xff09;之Java基础知识篇 超详细的Java面试题总结&#xff08;三&#xff09;之Java集合篇常见问题 超详细的Java面试题总结&#xf…

HTML教程--多页面窗体

基本语法 <frameset> ... </frameset> <frame src"url"> <noframes> ... </noframes> 在 <noframes> 标记后的文字将只出现在不支持 FRAMES 的浏览器中。 <HTML><HEAD></HEAD><FRAMESET><FRAME SRC…

js左侧三级菜单导航代码

效果演示&#xff1a; 实例代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang&…

【jsp】页面跳转的两种方法

注&#xff1a;由index.jxp跳转到Failure.jsp request.getSession().setAttribute("msg", "45654"); 方法一&#xff1a; response.sendRedirect("Failure.jsp"); 特点&#xff1a; &#xff08;1&#xff09;不能传值 &#xff08;2&…

windows远程桌面端口修改

众所周知&#xff0c;windows 2003远程终端服务基于默认端口3389。***者一般先扫描主机开放端口&#xff0c;一旦发现其开放了3389端口&#xff0c;就会进行下一步的***&#xff0c;所以我们只需要修改该务默认端口就可以避开大多数***者的耳目。 步骤&#xff1a; 打开“开始→…

《java第二次实验》

&#xff08;一&#xff09;学习总结 1.什么是构造方法&#xff1f;什么是构造方法的重载&#xff1f;下面的程序是否可以通过编译&#xff1f;为什么&#xff1f; public class Test {public static void main(String args[]) { Foo obj new Foo(); } } class Foo…

[置顶] 当我拿车钥匙的时候,刚交的女朋友跑了。。。

转载于:https://www.cnblogs.com/james1207/p/3291906.html

【jstl】jstl的基本操作

1、jstl不属于javaEE标准&#xff0c;所以需要额外引入jar包 2、引入后需要引入标签库 代码实现&#xff1a; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %> 注&#xff1a; &#xff08;1&#xff09;可以使用 alt / 的快捷…

如何修改Sql2005注册服务器名称 {转载}

1.使用select ServerName可以看到当前数据库的服务器名 2.从Sys.SysServers表中可以看到当前的所有服务器名 3.使用 sp_dropserver servername 将这个服务器名删除。 4.使用 sp_addserver new servername,LOCAL将本地服务器重新添加到服务器表中 5.查询Sys.SysServers表&#x…

据说是腾讯php程序员面试题目 蛋疼..要是提供PHP手册就HI了..

说在前面&#xff1a;&#xff11;、以下题目&#xff0c;除了编程任务外其他都需要写在给你提供的草纸上。纸张是珍贵的地球资源&#xff0c;请节约使用。编程任务在有相应的环境时&#xff0c;会要求上机书写&#xff0c;实在没有条件&#xff0c;就只能写在草纸上了。&#…

C功底挑战Java菜鸟入门概念干货(一)

一、认识Java 1、Java 程序比较特殊&#xff0c;它必须先经过编译&#xff0c;然后再利用解释的方式来运行。 2、Byte-codes 最大的好处是——可越平台运行&#xff0c;可让“一次编写&#xff0c;处处运行”成为可能。 3、使用 classpath 可以指定 class 的运行路径。 二、走…

c# lock (obj) 与 lock (this) 区别

lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象&#xff0c;如果有多个类实例的话&#xff0c;lock锁定的只是当前类实例&#xff0c;对其它类实例无影响。 直接上代码。 主窗体代码如下&#xff1a; delegate void SetTextCallback(string text);public Form1() …

【js】四种自定义对象的常见方法

<html><head></head><body><script type "text/javascript">//方法1var stu1 new Object();stu1.stuName "小强1";stu1.stuNo "123";stu1.print function() {alert(stu1.stuName);}//stu1.print();//alert(s…

eclipse启动时报错An internal error occurred during: Initializing Java Tooling.

eclipse启动时报错An internal error o当前工作目录文件夹下的 /.metadata/.plugins/org.eclipse.core.resources/.project。就是把初始化的项目删除&#xff0c;然后打开eclipse以后可以重新初始化。转载于:https://www.cnblogs.com/huanlingjisi/p/8696541.html

给Sqlite数据库设置密码

免费版Sqlie是不提供设置密码功能的&#xff0c;经过查阅资料最终找到了解决方案 方案一&#xff0c;从sqlite源码入手&#xff0c;据说sqlite源码已经提供了加密的接口&#xff0c;只是免费版没有实现&#xff0c;可以参考这位仁兄的博客以了解详情&#xff1a;http://www.cnb…

《创新者》读书笔记 PB16110698 第五周(~4.5)

本周我阅读了某同学推荐的《创新者》&#xff0c;这本书实际上是两个世纪以来信息技术的编年史&#xff0c;从巴贝奇的差分机到如今互联网时代的超级计算机&#xff0c;作者通过各个时代里一位位杰出的创新者&#xff0c;将计算机诞生、发展、崛起和蓬勃的历程娓娓道来。从一篇…

001本周总结报告

在本周中&#xff0c;自己主要做了小学期的编程作业&#xff0c;因为是小学期的特殊缘故&#xff0c;自己的学习时间几乎分配给了小学期的作业的编程&#xff0c;大约每天会抽出5个小时用来编写程序&#xff0c;本周在做小学期的作业时发现自己编程力不从心&#xff0c;无论是从…