mongodb 怎么更新数据数据结构图怎么画

11779人阅读
【数据库】(32)
一般指分布式文档存储数据介于和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.
&我们这次项目中用到的就是它的这两个特点
使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
面向集合存储,易存储对象类型的数据。
关于mongdb的数据数据操作,攀比SQL
Server ,mongodb的操作和它真是有的一比,几乎是如出一辙。增删改查,样样都有。
下面咱就看看它的连接和查询方式吧。
当然在使用mongodb数据库之前是要先引入它的一些驱动程序的,(我这里使用的是官方提供的两个驱动程序)所谓的就是两个Dll类库文件。分别是
&MongoDB.Driver.dll:顾名思义,驱动程序
&MongoDB.Bson.dll:序列化、Json相关。
之后我们在自己所用的程序中引入这两个dll文件和导入命名空间。
下列就是具体的实例代码了
1 链接数据库
///初始化Mongodb数据库链接
public void Init()
//数据库连接字符串,207017是mongodb的数据库端口
ConnectionString=&mongodb://Localhost:27017/?safe=true&/&
//数据库名称
conststring dbName =&ExamDB&;
//创建数据库连接
MongoServerSettingssettings= new MongoServerSettings();
settings.MaxConnectionPoolSize = 1000;//设定最大连接池
//等待列队数量
settings.WaitQueueSize = 50;
MongoServer server=MongoServer.Create(settings);//创建连接数据文件
//获得数据库cnblogs
MongoDatabase db=server.GateDataBase(dbName);
通过我们先前的Sql链接数据库我们发现几乎没有什么不同,这是名字换了下而已。所以不同的数据库操作,只要认识了一种,熟悉后,对别的数据库操作,上手是很容易的。
string connStr =ConfigurationManager.AppSettings[&connstr&]; //获取配置文件的连接
conn = new SqlConnection(connStr);
conn.open();
好了数据打开了,现在得添加数据了,由于mongodb没有表的概念,只有数据集合,所以我们插入数据,就要设定数据的集合名称。(但这里很类似表,只是存储的数据不再受表的限制,它是对象集合,所以可以存储任意的数据类型):
public static stringfileTable = &files&;//设定查询的集合名称
//Httpcontext类是获取前台的数据
Public bool Insert(HttpContext contex)
MongoDatabase db = Init();
// MongoGridFS fs = newMongoGridFS(db); //如果不设定查询的集合,则默认读取的集合表名是filse
//定义设定集合对象,设定查询的集合
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
//定义文件的操作对象,可以执行文件的增加,删除和更新操作
MongoGridFS fs = new MongoGridFS(DB, fsSetting);
public sealed class HttpPostedFile.ContentLength
获取上载文件的大小(以字节为单位)。
// 返回结果:
// 文件长度(以字节为单位)。
//定义文件字节流对象
HttpPostedFile file =context.Request.Files[&Filedata&];
int nFileLen = file.ContentL//
文件长度(以字节为单位)
byte[]myData = new Byte[nFileLen];
file.InputStream.Read(myData, 0, nFileLen).//将文件以字节流的形式写入
//添加文件上传的附件信息,可以添加很多,这里只做个实例
MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
option.UploadDate = DateTime.N
//Using语句实现销毁链接方式
//MongoGirdFSStream可以实现文件的度和取得操作,
//创建文件,文件并存储数据
using(MongoGridFSStream gfs = fs.Create(file.FileName, option))
gfs.Write(myData, 0,nFileLen);
gfs.Close();
通过实例我们发现,Mongodb的操作和SQLServer的操作是很大程度上是相识的,包括增,删除,添加和修改等方式,只是名字不同。我们不必因为是一个新的东西而听着害怕这种感觉,只要肯联系和观察思考,就会发现和以往有很多联系之处的
以上只是一个简单的上传的实例,具体的更多的方法还等待大家继续去实践。后续继续说明Mongodb的一些配置。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:433652次
积分:15385
积分:15385
排名:第454名
原创:252篇
评论:4813条
阅读:7542
文章:20篇
阅读:53908
阅读:5391
(2)(3)(2)(4)(5)(4)(4)(4)(4)(6)(4)(4)(4)(4)(4)(4)(4)(4)(6)(6)(6)(5)(5)(8)(7)(5)(5)(5)(9)(10)(9)(8)(5)(7)(7)(14)(7)(5)(4)(5)(12)(7)(8)(8)(4)(1)(1)(okmajdye)
(星星点灯)
第三方登录:当前位置&&&&&&&&&
MongoDB为何如此流行?
【文章摘要】本文中,MongoDB云服务商MongoLab的创始人William Shulman解读了为何文档型NoSQL数据库MongoDB会成为DBA的新宠。
  在NoSQL数据库家族,MongoDB一直是最受追捧的产品,越来越多的DBA都开始接触这一文档型NoSQL数据库,其东家10gen也成为目前整个硅谷地区炙手可热的公司之一。在上个月发布的DB-Engine数据库产品流行度排名中,MongoDB紧随Oracle、MSSQL、DB2等主流数据库排在第7位,成为NoSQL战线中排名最高的产品。  是什么让MongoDB如此流行?和其他NoSQL数据库相比,MongoDB又有哪些特别之处?未来的数据库会不会是NoSQL的天下?针对这些问题,MongoDB云服务商MongoLab的创始人William Shulman在他的博客中花了很大的篇幅从多个角度进行了解答。  编程语言的演进  编写计算机程序最终的目的,就是要告诉计算机该如何运行。也正是因为如此,在软件开发领域的诸多创新都伴随着编程语言的演进。更易用更高效的编程语言能够让开发者更好地指挥计算机系统来为他服务。  由于计算机是以二进制的方式运行的,而人类的表达方式与此大相径庭。所以每过那么几年我们就能看到新的、更高级的编程语言推出来,其表达能力在不断地提升,这其中包括算法的表达,当然也包括数据结构的表达。  对象与关系  现如今,几乎所有的编程语言都会支持面向对象的程序设计方法,当在代码中对实体进行建模的时候,我们通常会用到许多不同的数据类型,如整型、字符型、数组以及对象等。  尽管不同语言之间的处理方式会有细微的区别,但是嵌套对象结构的思路已经成为我们描述“事物”的通用语言。  虽然编程语言的发展速度非常之快,但是我们应该看到保存数据的数据结构变化却并不那么快。过去的30年当中,我们主要用到的数据结构就是表(Table),它是由许多行列组成的一种数据结构,其中包含了一系列标量值,如int、string等。这就构成了我们所熟悉的关系型数据库,从上世纪80年代初发展壮大起来,与其同时代的数据库系统相比,关系型数据库的事务性更好,查询速度更快并且空间利用率更高,同时它也成就了像Oracle这样的软件公司。  对于程序员来说,这其实是非常痛苦的,因为在代码中通过对象来进行建模,同时还要在表中进行呈现是非常困难的。程序员需要每天在对象――关系――对象之间来回变换。所以在每一个面对对象编程的语言中都会存在所谓的对象关系映射工具(ORM),然而即使是使用现成的工具,进行对象关系映射也是一件非常耗时的事。  因此,从90年代开始,就有人进行了对象数据库的尝试,但是仅仅是昙花一现,它并未动摇关系型数据库的统治地位。到了2000年以后,以MongoDB为代表的文档型数据库横空出世,它也是Web时代下第一个成功的对象型存储。正因为如此,MongoDB对于存储数据的数据结构带来了飞跃式的创新。同传统的二维表作为记录不同,MongoDB能够收集丰富、循环的N维对象(文档)作为记录。  这里我们举一个例子,博客文章。大多数人在编程的时候会使用“类/对象”的架构来进行建模,但使用关系型数据库来存储博客数据就会遇到麻烦,因为每一个输入的元素会分散到多个表当中。如下图所示:  所以你需要知道如何把每一个“BlogPost’ ”对象转换到表当中,并把它们存储在关系模型当中,这是非常麻烦的。  MongoDB会怎么做?  使用MongoDB,你的博客文章就能够存储在一个单一的集合当中,每一个元素都很明显,如下所示:  {  _id: 1234,  author: { name: "Bob Davis", email : "" },  post: "In these troubled times I like to …",  date: { $date: " 13:23UTC" },  location: [ -121.3222 ],  rating: 2.2,  comments: [  { user: "",  upVotes: 22,  downVotes: 14,  text: "Great point! I agree" },  { user: "holly.",  upVotes: 421,  downVotes: 22,  text: "You are a moron" }  ],  tags: [ "Politics", "Virginia" ]  }  所以使用文档型数据库的好处就是,数据存储和程序中所呈现的并无两样,无需复杂的映射过程。  MongoDB的优势还有哪些?  无论是消费群体还是企业用户,针对目前大多数Web应用,MongoDB都能够轻松地对实体进行建模,以下这些场景都有MongoDB的用武之地:  账户和用户资料  CMS  表格数据处理  用户生成的内容系统  消息系统  系统设置  任何形式的日志数据系统  图形数据系统  基于地理位置的数据系统  数据即接口  数据结构能体现开发者的程序和构想,所以我们始终在寻找方法,让数据结构更有表达力,从而更好地进行应用的建模。  所以回到MongoDB为何流行的话题上,并不是它的扩展性有多好,而是因为数据结构。同其他的NoSQL数据库技术相比,MongoDB的扩展性并不是最出色的,但是它在数据结构上的创新,能够让我们更加轻松地、更直观地对事物进行建模,这对于应用是最重要的 ,也是MongoDB流行的真正原因。像MongoDB这样的数据库,在未来将成为操作型数据存储的主要数据库范式,而关系型数据库将起到专用工具的作用。  对于大多数用例,在代码和数据库中使用相同的基础数据模型是具有重要意义的,因为它能够极大地简化应用开发的过程,并消除复杂的映射层。因此一个基于JSON的文档数据库,如MongoDB将是也将是未来数据库技术创新的出发点。
责任编辑:安建伟
关于&MongoDB 文档型数据库&相关报道
loading...
商用软件最新文章
商用软件最新专题您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
MongoDB概述与存储结构.ppt43页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:300 &&
你可能关注的文档:
··········
··········
BSON格式存储 例: a:'12'
BSON结构如下: Len
vtype |key|0|
|0 | value|结束符号 4| 1 |
* * 软实力――文件 在MongoDB内部,每个数据库都包含一个.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。所以如果系统中有一个叫做test的数库,那么构成test这个数据库的文件就会由test.ns,test.0,test.1等等组成。其中*.ns是包含命名空间的文件,保存该数据库数据的相关信息。*.0和*.1是数据文件。 32位系统的MongoDB服务器每一个Mongod实例只能使用2G的数据文件。这是由于地址指针只能支持32位。 * * 命名空间 在数据文件内部,每个数据库都是按照命名空间组织的,一种类别的数据与其他类别的分开存放。每个集合的文档都有自己的命名空间,索引也是。命名空间的元数据存放在数据库的 .ns 文件中。 每个命名空间的数据都被分成若干组,放到数据文件的某一区域内,这个区域称为数据域。在图 中可以看到数据库 foo 有 3 个数据文件,其中第 3 个是预分配的空文件。前两个数据文件被分成几个数据域,属于几个不同的命名空间。
* * 软实力――存储过程 * * 下图展示了数据库是如何跟底层系统打交道的 虚拟地址空间 * * 内部文件格式 在名字空间文件中,保存了每个名字空间的存储信息元数据,包括其大小,块数,第一块位置,最后一块位置,被删除的块的链表以及索引信息 * * 块结构 各个Extent 块 采用双链表的形式连接 * * 块和记录 各个文档数据也是采用双链表的形式连接 * * 块相关特性 1.每一条记录在块内从4的倍数的字节处开始
2.块的大小不会动态扩增
3.尽量数据不跨块,但若记录的大小大于一个块的大小,必然会跨块
正在加载中,请稍后...本文主要讲述MongoDB使用的数据类型BSON,使用的传输协议Mongo Wire Protocol,MongoDB数据文件的内部结构。
BSON [bee · sahn], short for Bin-ary , is a bin-ary-en-coded seri-al-iz-a-tion of JSON-like doc-u-ments.
相信大家都很熟悉,官网上用一个页面,几百字就把JSON的规则讲清楚了,JSON只包括六种数据类型:null,对象,布尔,数字,字符串以及数组。而BSON支持更多的数据类型,比如日期类型等。
       的一个例子{&hello&: &world&},分析BSON的存储结构如下:
TotalSize(4)| { BSONType(1)| FieldName | Data } * EOO(1)
TotalSize:Document转换为BSON后的总长度,4个字节表示
BSONType:Data的数据类型,占一个字节
FieldName:字段名,例子中的hello,key/value的&key&,UTF-8字符串,字符串都有一个结束符'\0'
Data:key/value的value,例子中的&world&,如果是字符串则在Data前需要另加四个字节存储Data的长度,如果是其他格式可以参考。
*:key/value的对数,比如{&hello&:&world&, &hello1&:&world1&},有两对
EOO:结束符,\x00
分析例子{&hello&:&world&}的长度:
TotalSize(4) + BSONType(1) + FieldName(5+1) + Data(4 + 5 + 1) + EOO(1) = 22 字节
进入Mongo Shell可以通过Object.bsonsize 查看bson大小。
而且在的example中也可以看到BSON的前四个字节为\x16\x00\x00\x00,十进制正好是22。
     BSON牺牲一些空间来换取更容易遍历的格式,不用每次都检查是否等于'\0',可遍历性是BSON非常重要的性质。
三、 Mongo Wire Protocol
Mongo Wire Protocol 与 http, ftp都属于应用层协议,只不过该协议目前只是应用于MongoDB 的相关应用中。每个Mongo Wire Protocol 消息都是由标准消息头部和具体的请求数据组成。
标准消息头部格式如下:
而具体的请求,比如修改集合
具体可以参考。
四、 MongoDB数据文件的内部结构
每个数据库都有一个.ns文件和若干个数据文件组成(.0,.1,.2,.....),其中.ns文件为16M,而.0文件16M,.1文件32M,往后则翻倍,最大值为2G,这样可以让小数据库不浪费太多的空间,大数据库能够使用磁盘上连续的空间。
数据库里面的每个集合和索引都对应着命名空间。
这是local数据库中的命名空间,可以看到集合,固定集合(capped collection),索引都有自己的命名空间。
.ns文件记录着若干个集合命名空间和索引命名空间。
一个集合命名空间又有多个数据域(extent),集合命名空间里存储着集合的元数据,比如集合名称,集合的第一个数据域和最后一个数据域的位置等等。而一个数据域由若干条文档(document)组成,每个数据域都有一个头部,记录着第一条文档和最后一条文档的为知,以及该数据域的一些元数据。extent之间,document之间通过双向链表连接。
索引的存储数据结构是B树,索引命名空间存储着对B树的根节点的指针。MongoDB数据内部结构图如下(图片来自NoSQLFan)
阅读(...) 评论()}

我要回帖

更多关于 mongodb 怎么清除数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信