MongoDB

来自开放百科 - 灰狐
(版本间的差异)
跳转到: 导航, 搜索
(功能)
(新闻)
 
(未显示1个用户的90个中间版本)
第1行: 第1行:
{{top news}}
 
 
{{SeeWikipedia}}
 
{{SeeWikipedia}}
 
[[Image:Mongodb-90x90.gif|right]]
 
[[Image:Mongodb-90x90.gif|right]]
  
MongoDB 是是一个高性能、开源、无模式的文档数据库。它是一个新兴的NoSQL数据库管理系统,常被用于高流量网站,在线游戏网站和搜索引擎的大规模数据管理和分类。
+
MongoDB 是是一个高性能、开源(AGPL,Apache v2)、无模式的文档数据库。它是一个新兴的NoSQL数据库管理系统,常被用于高流量网站,在线游戏网站和搜索引擎的大规模数据管理和分类。
 +
 
 +
MongoDB的目标是缩小键/值存储(快速和可伸缩)和关系型数据库(丰富的功能)之间的差距,填补空档。
 +
[[文件:nosql-mongodb-rdbms.png|right]]
 +
 
 +
==新闻==
 +
*2018年10月16日之前发布的版本采用 AGPL 许可证,2018年10月16日之后的所有版本包括先前版本的程序修复将根据服务器端公共许可证 Server Side Public License (SSPL) v1 发布。从此也可考虑重新选择 [[ScyllaDB]]、[[Apache Cassandra]] 等替代方案。
 +
*[http://www.36kr.com/p/218601.html MongoDB获8000万美元融资],1年前曾获1.5亿美元融资,估值超10亿美元。(2015.01)
 +
 
 +
==版本==
 +
*[https://docs.mongodb.com/manual/release-notes/4.0/ 4.x]
 +
*3.x
 +
[https://www.mongodb.com/blog/post/announcing-mongodb-30 MongoDB 3.0] modular storage engine API 支持第三方存储引擎: [[RocksDB]], [https://github.com/percona/tokudb-engine TokuDB] 和 [https://github.com/wiredtiger/wiredtiger WiredTiger].
  
 
==功能==
 
==功能==
第14行: 第25行:
 
*高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
 
*高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
 
*自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
 
*自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
 +
 +
==数据模型==
 +
*[http://docs.mongoing.com/manual-zh/data-modeling.html MongoDB数据模型]
 +
*[https://www.mongodb.com/blog/post/schema-design-for-time-series-data-in-mongodb Schema Design for Time Series Data in MongoDB]
 +
 
==GridFS==
 
==GridFS==
 
MongoDB中是使用GridFS来做存储的,它有一部分限制,就是单个文档不能超过4兆,在1.8版以后把这个限制扩展到8兆。它的本质是把大于4兆的数据给你切成一片一片的,分成了两个collection把它插进去。但是这个一般是怎么实现的呢,其实服务端并不实现,而是通过你的驱动,也就是客户端去实现。
 
MongoDB中是使用GridFS来做存储的,它有一部分限制,就是单个文档不能超过4兆,在1.8版以后把这个限制扩展到8兆。它的本质是把大于4兆的数据给你切成一片一片的,分成了两个collection把它插进去。但是这个一般是怎么实现的呢,其实服务端并不实现,而是通过你的驱动,也就是客户端去实现。
 +
 +
bin/mongofiles put Linux-48x48.gif -h 192.168.1.101
 +
connected to: 192.168.1.101
 +
added file: { _id: ObjectId('4f3b58d6493789259413d0e1'), filename: "Linux-48x48.gif", chunkSize: 262144, uploadDate: new Date(1329289430358), md5: 
 +
"fe74ea57fc88c522a0954ad7f9e3fe9f", length: 2087 }
 +
done!
 +
bin/mongofiles list -h 192.168.1.101
 +
connected to: 192.168.1.101
 +
Linux-48x48.gif 2087
 +
Kde-48x48.png 5736
 +
Yii-48x48.gif 1856
 +
Zorin-48x48.gif 2083
 +
bin/mongofiles get Linux-48x48.gif
  
 
==应用场景==
 
==应用场景==
第26行: 第55行:
  
 
MongoDB中对象的最大尺寸被限制为4MB,但对象的数量不受限制,MongoDB可以通过集群加快操作的执行速度,当数据库变得越来越大时,可以向集群增加服务器解决性能问题。
 
MongoDB中对象的最大尺寸被限制为4MB,但对象的数量不受限制,MongoDB可以通过集群加快操作的执行速度,当数据库变得越来越大时,可以向集群增加服务器解决性能问题。
 +
 +
==电商==
 +
*[http://www.mongoing.com/blog/retail-reference-architecture-part-1 MongoDB电商参考架构第一部分:搭建一个灵活、可搜索、响应快速的产品目录系统]
 +
*[http://www.mongoing.com/blog/retail-reference-architecture-part-2-approaches-inventory-optimization MongoDB电商参考架构第二部分:库存优化方法]
 +
*[http://www.mongoing.com/blog/post/retail-reference-architecture-part-3-query-optimization-and-scaling MongoDB电商参考架构第三部分:查询优化及扩展]
 +
*[http://www.mongoing.com/blog/post/retail-reference-architecture-part-4-recommendations-and-personalizations MongoDB电商参考架构第四部分:推荐及个性化]
 +
 +
==Mac OS X==
 +
brew install mongodb
 +
ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
 +
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
 +
mongod --config /usr/local/etc/mongod.conf 或
 +
mongod --dbpath /data/db
 +
mongo
 +
> help
 +
> db.serverStatus()
 +
> db.serverStatus().wiredTiger
 +
brew update
 +
brew upgrade mongodb
 +
mongostat // mongodb状态
  
 
==Linux==
 
==Linux==
 
  获得类似 mongodb-linux-i686-2.0.2.tgz 的包
 
  获得类似 mongodb-linux-i686-2.0.2.tgz 的包
  mkdir -p /data/db/
+
  mkdir -p /usr/local/data/db/
  /bin/mongod --journal --rest &
+
  /bin/mongod --journal --rest --dbpath=/usr/local/data/db/ &
 
   http://localhost:28017/
 
   http://localhost:28017/
 
  ./mongo  
 
  ./mongo  
 +
增加身份认证
 +
use admin
 +
db.addUser('admin', '12345');
 +
db.auth('admin','12345');
 +
 
可能出现的问题:couldn't connect to server 127.0.0.1 shell/mongo.js:84
 
可能出现的问题:couldn't connect to server 127.0.0.1 shell/mongo.js:84
 
  这样解决 ./mongo 192.168.1.101:27017
 
  这样解决 ./mongo 192.168.1.101:27017
 
  > show dbs
 
  > show dbs
 +
 +
修改 /etc/mongodb.conf
 +
bind_ip = 192.168.1.101
 +
 +
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number
  
 
==Windows==
 
==Windows==
第45行: 第104行:
 
  >use admin
 
  >use admin
 
   
 
   
 +
==Connection==
 +
>use test
 +
>j = { name : "mongo" };
 +
> t = { x : 3 };
 +
> db.things.save(j);
 +
> db.things.save(t);
 +
> for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});
 +
> db.things.find();
 +
[http://www.mongodb.org/display/DOCS/Tutorial#Tutorial-InsertingDataintoACollection more detail] 
 +
==分区==
 +
mkdir /usr/local/data/db/a /usr/local/data/db/b
 +
./mongod --shardsvr --dbpath /usr/local/data/db/a --port 10000 > /tmp/sharda.log &
 +
./mongod --shardsvr --dbpath /usr/local/data/db/b --port 10001 > /tmp/shardb.log &
 +
mkdir /usr/local//data/db/config
 +
./mongod --configsvr --dbpath /usr/local/data/db/config --port 20000 > /tmp/configdb.log &
 +
./mongos --configdb localhost:20000 > /tmp/mongos.log &
 +
./mongod --journal --rest --dbpath=/usr/local/data/db/ &
 +
./mongo 192.168.1.101:27017
 +
设置集群,加入两个shards (a and b)
 +
> use admin
 +
switched to db admin
 +
> db.runCommand( { addshard : "192.168.1.101:10000" } )
 +
> db.runCommand( { addshard : "192.168.1.101:10001" } )
 +
> db.runCommand( { enablesharding : "test" } )
 +
> db.runCommand( { shardcollection : "test.people", key : {name : 1} } )
 +
管理
 +
> use config
 +
> show collections
 +
关闭
 +
kill -2 pid
 +
若非正常关闭,无法启动数据库,mongod --dbpath /var/lib/mongodb --repair 然后重启。
 +
 +
==REST==
 +
vim /etc/mongodb.conf
 +
rest = true
 +
auth = true // 客户端登录的认证机制
 +
 +
==管理工具==
 +
*[[Robo 3T]] 推荐
 +
*[[mongo-express]]
 +
*[[Robomongo]]
 +
*[https://github.com/officert/mongotron mongotron] based on [[Electron framework]] and [[AngularJS]]
 +
*[[phpMoAdmin]]
 +
*[[MongoHub]]
 +
*[https://github.com/mzupan/nagios-plugin-mongodb MongoDB 的 Nagios 监控插件]
 +
*[http://www.jumperz.net/index.php?i=2&a=0&b=9 MonjaDB (MongoDB GUI client tool) ]
 +
*[https://github.com/DrMongo/DrMongo Dr. Mongo] 基于[[Meteor]]构建
 +
 +
==PostgreSQL==
 +
*使用[[Bucardo]]从[[PostgreSQL]]同步数据到MongoDB
 +
*[http://blog.endpoint.com/2011/06/mongodb-replication-from-postgres-using.html MongoDB replication from Postgres using Bucardo]
 +
 +
==Hadoop==
 +
[https://github.com/mongodb/mongo-hadoop MongoDB Connector for Hadoop]
 +
 +
==Clojure==
 +
*[http://clojuremongodb.info/ Clojure Monger]
 +
*[http://clojurewerkz.org/ Clojure libraries for MongoDB, RabbitMQ, validations, Neo4J, ElasticSearch, Apache Cassandra, Riak, Memcached, stream processing]
 +
 +
==[[Alfresco]]==
 +
*[http://www.ixxus.com/blog/2013/02/alfresco-mongodb/ Alfresco and MongoDB]
 +
 +
==虚拟化==
 +
*[[OpenVZ]]
 +
*[[Amazon EC2]]
 +
 
==用户==
 
==用户==
 
*[http://www.programmer.com.cn/4199/ 视觉中国的NoSQL之路:从MySQL到MongoDB]
 
*[http://www.programmer.com.cn/4199/ 视觉中国的NoSQL之路:从MySQL到MongoDB]
 
*[http://www.infoq.com/cn/news/2010/11/wordnik-mongodb Wordnik的MongoDB使用经验]
 
*[http://www.infoq.com/cn/news/2010/11/wordnik-mongodb Wordnik的MongoDB使用经验]
 
*[http://www.infoq.com/cn/news/2010/10/eliot-analyze-outage-of-4sq MongoDB创始人Eliot Horowitz分析FourSquare宕机原因]
 
*[http://www.infoq.com/cn/news/2010/10/eliot-analyze-outage-of-4sq MongoDB创始人Eliot Horowitz分析FourSquare宕机原因]
 +
*[https://github.com/blog/530-how-we-made-github-fast How We Made GitHub Fast]
 +
*craigslist.com [http://www.slideshare.net/jzawodn/lessons-learned-migrating-2-billion-documents-at-craigslist Craigslist迁移20亿数据到MongoDB的经验与教训]
 +
*sourceforge.net
 +
*淘宝 MongoDB is used to store the monitoring data.
 +
*大众点评
 +
*网易游戏: MongoDB、云服务化、自动化运维
 +
更多用户:http://www.mongodb.org/display/DOCS/Production+Deployments
  
==链接==
+
==MongoDB服务==
*[http://www.mongodb.org MongoDB官方网站]
+
*[http://www.mlab.com/ mLab]
*[http://www.10gen.com/ 10gen.com]
+
*[https://objectrocket.com/ ObjectRocket]
 +
*[https://mongohq.com/ MongoHQ]
 +
*[http://nodegrid.com/ Nodegrid]
 +
更多服务:[http://www.mongodb.org/display/DOCS/Hosting+Center Hosting Center]
 +
*[http://wiki.joyent.com/display/jpc2/Joyent+MongoDB+SmartMachine Joyent MongoDB SmartMachine]
 +
*[http://mongodb.ws MongoDB as a Web Services]
  
==图书==
+
==AWS==
 +
*[https://aws.amazon.com/marketplace/seller-profile/ref=srh_res_product_vendor?ie=UTF8&id=c9032c7b-70dd-459f-834f-c1e23cf3d092 MongoDB @ AWS Marketplace]
 +
*[https://docs.mongodb.com/ecosystem/platforms/amazon-ec2/ MongoDB on Amazon EC2]
 +
 
 +
==图集==
 
<gallery widths=100px heights=100px perrow=6>
 
<gallery widths=100px heights=100px perrow=6>
 +
image:mongodb-application-architecture.png|MongoDB应用架构
 +
image:mongodb-data-lake.png|MongoDB整合到数据湖
 +
image:scaling-mongodb.png|扩展
 +
Image:mongodb-sharding.png|Sharding
 +
image:mongodb-replica-set-primary-with-secondary-and-arbiter.png|副本集
 +
Image:mongodb-machines.png|Machines
 +
Image:mongodb-sharding-server.png|Sharding Server
 +
Image:mongodb-sharding-datacenter.jpg|Data Center
 +
Image:mongodb-gridfs-image.png|GirdFS存储图片
 
Image:Scaling-MongoDB.jpg
 
Image:Scaling-MongoDB.jpg
 +
image:Mongodb-Forrester-Wave-Big-Data-NoSQL-Q3-2016.gif|Forrester Wave 2016
 +
image:Gartner-Magic-Quadrant-for-Operational-Database-Management-Systems-October-2015.png|Gartner魔力象限2015
 +
image:mongodb-data-model.png|数据模型
 +
image:mongodb-data-model-references.png|数据关系:引用
 +
image:mongodb-data-model-embedded-data.png|数据关系:内嵌数据
 +
image:mongodb-mongotron.png|Mongotron
 +
image:eclipse-nodebb-mongodb.png|Eclipse
 +
image:Reaction-Commerce-MongoDB.png|电商数据库
 +
image:gekko-mongodb.png|比特币交易数据
 
</gallery>
 
</gallery>
  
{{Comment}}
+
==链接==
 +
*[http://www.mongodb.org MongoDB官方网站]
 +
*[https://github.com/mongodb/mongo MongoDB @ GitHub]
 +
*[https://github.com/mongodb/specifications MongoDB Specifications]
 +
*[https://github.com/ramnes/awesome-mongodb Awesome MongoDB] [[image:awesome.png]]
 +
*[http://api.mongodb.org/ MongoDB API]
 +
*[http://docs.huihoo.com/mongodb MongoDB开放文档]
 +
*[http://www.mongoing.com/ MongoDB中文社区]
 +
*[http://www.10gen.com/ 10gen.com]
 +
*[http://www.ibm.com/developerworks/cn/opensource/os-django-mongo/ 结合使用 MongoDB 和 Django]
 +
*[http://www.springsource.org/spring-data/mongodb Spring Data MongoDB]
 +
*[http://sahatyalkabov.com/create-a-tv-show-tracker-using-angularjs-nodejs-and-mongodb/ Create a TV Show Tracker using AngularJS, Node.js and MongoDB]
 +
*[https://www.reddit.com/r/programming/comments/3dvzsl/why_you_should_never_ever_ever_use_mongodb/ Why you should never, ever, ever use MongoDB]
 +
*[https://searchdatabase.techtarget.com.cn/7-19246/ MongoDB与CouchDB的全方位对比]
  
[[Category:NoSQL]]
+
[[category:database]]
[[Category:C++]]
+
[[category:NoSQL]]
 +
[[category:JSON]]
 +
[[category:c++]]
 +
[[category:huihoo]]

2020年8月28日 (五) 04:13的最后版本

Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 MongoDB Thanks, Wikipedia.
Mongodb-90x90.gif

MongoDB 是是一个高性能、开源(AGPL,Apache v2)、无模式的文档数据库。它是一个新兴的NoSQL数据库管理系统,常被用于高流量网站,在线游戏网站和搜索引擎的大规模数据管理和分类。

MongoDB的目标是缩小键/值存储(快速和可伸缩)和关系型数据库(丰富的功能)之间的差距,填补空档。

Nosql-mongodb-rdbms.png

目录

[编辑] 新闻

  • 2018年10月16日之前发布的版本采用 AGPL 许可证,2018年10月16日之后的所有版本包括先前版本的程序修复将根据服务器端公共许可证 Server Side Public License (SSPL) v1 发布。从此也可考虑重新选择 ScyllaDBApache Cassandra 等替代方案。
  • MongoDB获8000万美元融资,1年前曾获1.5亿美元融资,估值超10亿美元。(2015.01)

[编辑] 版本

MongoDB 3.0 modular storage engine API 支持第三方存储引擎: RocksDB, TokuDBWiredTiger.

[编辑] 功能

Mongo使用C++开发,提供了以下功能:

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

[编辑] 数据模型

[编辑] GridFS

MongoDB中是使用GridFS来做存储的,它有一部分限制,就是单个文档不能超过4兆,在1.8版以后把这个限制扩展到8兆。它的本质是把大于4兆的数据给你切成一片一片的,分成了两个collection把它插进去。但是这个一般是怎么实现的呢,其实服务端并不实现,而是通过你的驱动,也就是客户端去实现。

bin/mongofiles put Linux-48x48.gif -h 192.168.1.101
connected to: 192.168.1.101
added file: { _id: ObjectId('4f3b58d6493789259413d0e1'), filename: "Linux-48x48.gif", chunkSize: 262144, uploadDate: new Date(1329289430358), md5:  
"fe74ea57fc88c522a0954ad7f9e3fe9f", length: 2087 }
done!
bin/mongofiles list -h 192.168.1.101
connected to: 192.168.1.101
Linux-48x48.gif	2087
Kde-48x48.png	5736
Yii-48x48.gif	1856
Zorin-48x48.gif	2083
bin/mongofiles get Linux-48x48.gif

[编辑] 应用场景

Mongo适合用于以下场景:

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

MongoDB中对象的最大尺寸被限制为4MB,但对象的数量不受限制,MongoDB可以通过集群加快操作的执行速度,当数据库变得越来越大时,可以向集群增加服务器解决性能问题。

[编辑] 电商

[编辑] Mac OS X

brew install mongodb
ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
mongod --config /usr/local/etc/mongod.conf 或
mongod --dbpath /data/db
mongo
> help
> db.serverStatus()
> db.serverStatus().wiredTiger
brew update
brew upgrade mongodb
mongostat // mongodb状态

[编辑] Linux

获得类似 mongodb-linux-i686-2.0.2.tgz 的包
mkdir -p /usr/local/data/db/
/bin/mongod --journal --rest --dbpath=/usr/local/data/db/ &
 http://localhost:28017/
./mongo 

增加身份认证

use admin
db.addUser('admin', '12345');
db.auth('admin','12345');

可能出现的问题:couldn't connect to server 127.0.0.1 shell/mongo.js:84

这样解决 ./mongo 192.168.1.101:27017
> show dbs

修改 /etc/mongodb.conf

bind_ip = 192.168.1.101

You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number

[编辑] Windows

D:\mongodb-win32-i386-0.9.7\bin\mongod run --dbpath=d:\data\db
http://127.0.0.1:28017/
D:\mongodb-win32-i386-0.9.7\bin\mongo
>help
>show dbs
>use admin

[编辑] Connection

>use test
>j = { name : "mongo" };
> t = { x : 3 };
> db.things.save(j);
> db.things.save(t);
> for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});
> db.things.find();

more detail

[编辑] 分区

mkdir /usr/local/data/db/a /usr/local/data/db/b 
./mongod --shardsvr --dbpath /usr/local/data/db/a --port 10000 > /tmp/sharda.log &
./mongod --shardsvr --dbpath /usr/local/data/db/b --port 10001 > /tmp/shardb.log &
mkdir /usr/local//data/db/config
./mongod --configsvr --dbpath /usr/local/data/db/config --port 20000 > /tmp/configdb.log &
./mongos --configdb localhost:20000 > /tmp/mongos.log &
./mongod --journal --rest --dbpath=/usr/local/data/db/ &
./mongo 192.168.1.101:27017

设置集群,加入两个shards (a and b)

> use admin
switched to db admin 
> db.runCommand( { addshard : "192.168.1.101:10000" } )
> db.runCommand( { addshard : "192.168.1.101:10001" } )
> db.runCommand( { enablesharding : "test" } ) 
> db.runCommand( { shardcollection : "test.people", key : {name : 1} } )

管理

> use config
> show collections

关闭

kill -2 pid

若非正常关闭,无法启动数据库,mongod --dbpath /var/lib/mongodb --repair 然后重启。

[编辑] REST

vim /etc/mongodb.conf
rest = true
auth = true // 客户端登录的认证机制

[编辑] 管理工具

[编辑] PostgreSQL

[编辑] Hadoop

MongoDB Connector for Hadoop

[编辑] Clojure

[编辑] Alfresco

[编辑] 虚拟化

[编辑] 用户

更多用户:http://www.mongodb.org/display/DOCS/Production+Deployments

[编辑] MongoDB服务

更多服务:Hosting Center

[编辑] AWS

[编辑] 图集

[编辑] 链接

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱