찾다

Mongodb从配置到应用

Jun 07, 2016 pm 04:33 PM
mongomongodb애플리케이션소개구성

一,Mongodb简介 Mongo(http://www.mongodb.org/)是一个高性能,开源(代震军大牛正在研究Mongodb的源码,大家可以去看看http://www.cnblogs.com/daizhj/),模式自由(schema-free)的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值(key-value

一,Mongodb简介

Mongo(http://www.mongodb.org/)是一个高性能,开源(代震军大牛正在研究Mongodb的源码,大家可以去看看http://www.cnblogs.com/daizhj/),模式自由(schema-free)的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值(key-value)存储方式。Mongo使用C++开发,

具有以下特性:

  1. 面向集合的存储:适合存储对象及JSON形式的数据。
  2. 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  3. 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  4. 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  5. 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  6. 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
  7. 自动分片以支持云级别的伸缩性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。
  8. 模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
  9. 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。

使用场合:

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

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

二,Ubuntu 下配置Mongodb

Ubuntu知识扫盲:

chown -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

Mongodb目前最新版本是1.8.1
首先启动终端 :
输入 wget?http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.1.tgz
下载mongodb-linux-i686-1.8.1.tgz安装包
解压 tar -zxvf mongodb-linux-i686-1.8.1.tgz

默认情况下Mongodb会在/data/db/ 这个文件夹存放数据

在当前目录下输入如下命令,创建用户 :
//添加一个mongodb用户
adduser mongodbxiao
//设置密码
passwd mongodb
201104261606187429 Mongodb从配置到应用

继续输入

sudo mkdir -p /data/db/
//把”/data/db/”的属主改成mongodb用户
$ sudo chown mongodbxiao /data/db/
$ chown -R mongodb:mongodbxiao /data
当然 可以 通过–dbpath 命令 指定MongoDB将数据存储到另外的目录中去。

在运行下面的语句之前需要安装一下mongo shell 否则会收到提示:程序“mongo”尚未安装。
apt-get install mongodb-clients

运行数据库
$? ./mongodb-linux-i686-1.8.1/bin/mongod
$ ./mongodb-linux-i686-1.8.1/bin/mongo
> db.test.save({123123:’哈哈哈’})
> db.test.find();

创建数据库并添加一条记录,最后查询结果:
201104261606212115 Mongodb从配置到应用

到此证明我们在Ubuntu下配置Mongodb成功..

ps:使用Ubuntu过程中经常会遇到这个错误:

201104261606242657 Mongodb从配置到应用

只需要输入强制解锁,命令即可解决。

sudo rm /var/cache/apt/archives/lock

sudo rm /var/lib/dpkg/lock

三,Mongodb客户端管理工具

Try MongoDB

不用安装就可以试用MongoDB,和tryredis一样,是一个基于web的shell模拟工具,可以让你在不用安装MongoDB的情况下试用MongoDB的各种功能.

Mongo3?– MongoDB 集群管理工具

MongoVUE

一个windows下的客户端管理工具,我推荐这个,非常不错.有点类似于mysql管理工具..

201104261606326258 Mongodb从配置到应用

四,Mongodb C#版驱动

第一款:mongodb-csharp 项目地址:http://github.com/samus/mongodb-csharp

简单介绍:该驱动是比较全的驱动,更新随度非常快,有人已经应用到项目中去,并且表现非常好。目前他们的团队正在致力于连接管理这部分功能的扩展例如:自动重连,连接池等等。

第二款:mongodb-net 项目地址:http://code.google.com/p/mongodb-net/

简单介绍:该开发还在进行中,有些功能还没有实现。

第三款:MongoDB.Emitter 项目地址:http://bitbucket.org/gwbasic/mongodb.emitter/

简单介绍:提供了强类型支持

第四款:CSMongo 项目地址:http://somewebguy.wordpress.com/2010/02/21/building-a-mongo-driver-part-1/

简单介绍:实现了部分功能,并且没有可下载的代码。但是你可以看他的博客以了解这种驱动的思想。

第五款:simple- mongodb 项目地址:http://code.google.com/p/simple-mongodb/

简单介绍:没有提供源代码,以JSon为核心。

最后一个是对第一款某些地方的增强,地址http://deserialized.com/convert-csharp-classes-to-and-from-mongodb-documents-automatically-using-net-reflection

第六款:NoRM 项目地址:http://github.com/atheken/NoRM

介绍:增强了第一种,支持强类型。

五,Mongodb 与sql 语句对照

此处用mysql中的sql语句做例子,C# 驱动用的是samus,也就是上文中介绍的第一种.

引入项目MongoDB.dll

//创建Mongo连接
  var mongo = new Mongo("mongodb://localhost");
  mongo.Connect();
  //获取一个数据库,如果没有会自动创建一个
  var db = mongo.GetDatabase("movieReviews");
  //创建一个列表,并为这个列表创建文档
  var movies = db.GetCollection("movies");

连接没问题之后,现在让我们用mysql 与mongodb的一些语句做下对比:

MongoDB Mysql
查询全部 movies.find(new Document()) SELECT * FROM movies
条件查询 movies.Find(new Document { { “title”, “Hello Esr” } }); SELECT * FROM movies WHERE title= ‘foobar’
查询数量 movies.Find(new Document { { “title”, “测试2″ } }).Documents.Count(); SELECT COUNT(*) FROM movies WHERE `title` = ‘foobar’
数量范围查询 1, movies.Find(new Document().Add(“$where”, new Code(“this.num > 50″)));

2, movies.Find(new Document().Add(“num”,? new Document().Add(“$gt”,50)));
($gt : > ; $gte : >= ; $lt :

3,movies.Find(“this.num > 50″);

4,movies.Find(new Document().Add(“$where”,new Code(“function(x){ return this.num > 50};”)));

select * from movies where num > 50
分页查询 movies.Find(new Document()).Skip(10).Limit(20); SELECT * FROM movies? limit 10,20
查询排序语句 movies.Find(new Document()).Sort(new Document() { { “num”, -1 } }); SELECT * FROM movies ORDER BY num DESC
查询指定字段 movies.Find(new Document().Add(“num”, new Document().Add(“$gt”, 50)), 10, 0, new Document() { { “title”, 1 } }); select title from movies where num > 50
插入语句 movies.Insert(new Document() { { “title”, “测试” }, { “resuleData”, DateTime.Now } }); INSERT INOT movies (`title`, `reauleDate`) values (‘foobar’,25)
删除语句 movies.Remove(new Document() { { “title”, “Hello Esr” } }); DELETE * FROM movies
更新语句 movies.Update(new Document() { { “title”, “测试2″ } }
, new Document() { { “title”, “测试11111″ } });
UPDATE movies SET `title` = ‘测试1111’ WHERE `title` = ‘测试1111′
Linq查询 (from item in db.GetCollection(“movies”).Linq()
where ((string)item["title"]).StartsWith(“Esr”)
select item);
select * from movies where title like ‘%Esr’

这里只举出了几个比较典型的例子,可以这么说,只要mysql可以完成的sql语句,在mongodb里面都可以实现.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL에서 뷰를 사용하는 한계는 무엇입니까?MySQL에서 뷰를 사용하는 한계는 무엇입니까?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations : 1) 그들은 upportallsqloperations, datamanipulation throughviewswithjoinsorbqueries를 제한하지 않습니다

MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여May 14, 2025 am 12:09 AM

적절한 usermanagementInmysqliscrucialforenhancingsecurityandensuringfefficientDatabaseOperation.1) USECREATEUSERTOWDDUSERS,@'localHost'or@'%'.

MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers, butpracticalfactorsdeteirefectiveuse : 1) ServerConfigurationimpactStriggerManagement; 2) 복잡한 트리거 스케일 스케일 사이드로드; 3) argertableSlowtriggerTriggerPerformance; 4) High ConconcercencyCancaUspriggerContention; 5) m

MySQL : Blob을 저장하는 것이 안전합니까?MySQL : Blob을 저장하는 것이 안전합니까?May 14, 2025 am 12:07 AM

예, It 'safetostoreBlobdatainmysql, butconsidertheStefactors : 1) StoragesPace : BlobScanconSumeSignificantspace, 잠재적으로 증가하는 CostsandSlownperformance

MySQL : PHP 웹 인터페이스를 통해 사용자 추가MySQL : PHP 웹 인터페이스를 통해 사용자 추가May 14, 2025 am 12:04 AM

PHP 웹 인터페이스를 통해 MySQL 사용자를 추가하면 MySQLI 확장 기능을 사용할 수 있습니다. 단계는 다음과 같습니다. 1. MySQL 데이터베이스에 연결하고 MySQLI 확장자를 사용하십시오. 2. 사용자를 생성하고 CreateUser 문을 사용하고 Password () 함수를 사용하여 암호를 암호화하십시오. 3. SQL 주입 방지 및 MySQLI_REAL_ESCAPE_STRING () 함수를 사용하여 사용자 입력을 처리하십시오. 4. 새 사용자에게 권한을 할당하고 보조금 명세서를 사용하십시오.

MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?May 13, 2025 am 12:14 AM

mysql'sblobissuilableforstoringbinarydatawithinareldatabase, whilenosqloptionslikemongodb, redis, and cassandraofferflexible, scalablesolutionsforunstuctureddata.blobissimplerbutcanslowwownperformance를 사용하는 것들보업 betterscal randaysand

MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례May 13, 2025 am 12:12 AM

TOADDAUSERINMYSQL, 사용 : CreateUser'UserName '@'host'IdentifiedBy'Password '; 여기서'showTodoitseciRely : 1) ChoosetheHostCareLyTocon trolaccess.2) setResourcelimitswithOptionslikemax_queries_per_hour.3) Usestrong, iriquepasswords.4) enforcessl/tlsconnectionswith

MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?May 13, 2025 am 12:09 AM

toavoidcommonmistakeswithstringdatatypesinmysql, stroundStringTypenuances, chooseTherightType, andManageEncodingAndCollationSettingSefectively.1) usecharforfixed-lengthstrings, varcharvariable-length, andtext/blobforlargerdata.2) setcarcatter

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.