MongoDB 高级篇:分片

标签: mongodb | 发表时间:2011-07-31 22:48 | 作者:(author unknown) Vingel
出处:http://simple-is-better.com/

可伸缩性是MongoDB的一个重要特征。虽然大多数数据库都支持手动分片,MongoDB支持自动分片。这篇文章提供了MongoDB自动分片的方法,15分钟,在MongoDB中创建分片。

数据分割以及在不同机器存储数据的过程称之为分片。通过在多台机器上分割数据,使得数据库系统能存储更多的数据,和处理更多的负载,在此过程中不需要更多更强大的机器。

有两种类型的分片,手动和自动分片。

在手动分片中,应用软件的代码管理不同服务器上的数据,并且在适当的服务器上查询并返回数据。手动分片可以使用虚拟数据库软件包完成。

MongoDB自动分片中,数据库服务器集群或shards处理数据的分割和数据自动重新负载。

自动分片

MongoDB分片的基本概念是分割集群成更小的块,或是文档。这些分档可以分布于很多的shards,这样每个shard负载总数据集得子集。
举个例子,思考一下。当你从集合选择一个key安装分片时,并使用key分割数据。这个key称为shard key。
假设你有一个联系人的集合。如果我们选择“姓”作为shard key,那么一个分片可以存储“姓”以A-F开头的,下一个分片可以存储“姓”以G-P开头的,最后一个分片存储“姓”以Q-Z开头的。当你添加和删除分片时,MongoDB会重新做数据的负载,这样每个分片会获取一定量的流量和实际量的数据。
所以你决定什么开始分片呢?考虑一下几个因素:

1. 你目前的机器的磁盘什么时候用完
2. 你希望比单一的mongod处理速度更快
3. 你希望在内存中保留更多的数据以改善性能

安装分片

分片需要包括不同的组件:
1. shard
分片存放数据集合的子集。分片可以是单一的mongod服务器(生产环境/测试环境),也可以是集合的复制(生产环境)
2. mongos
这是发送请求的过程。它发送数据请求,并且聚合服务器响应。它不会存储任何数据或是配置信息,虽然它从配置服务器做信息cache。
3. config server
配置服务器存储集群的配置信息。比如,数据位于哪个分片上,使用mongos决定请求的发送。

启动服务器

首先我们需要启动配置服务器和mongos。我们需要启动配置服务器,因为mongos使用配置服务器获取它的配置信息。

$ mkdir –p ~/dbs/config $ ./mongod –dbpath ~/dbs/config –port 20000 

现在我们启动mongos进程。发送服务器甚至不需要数据目录,但需要知道配置服务器的位置。

$ ./mongs –port 30000 –configdb localhost:20000 

由mongos管理分片。

添加新分片

动正常的mongod实例(或是复制)

$ mkdir –p ~/dbs/shard1 $ ./mongod –dbpath ~/dbs/shard1 –port 10000 

现在连接到已启动的mongos进程,添加分片到集群
首先,打开shell连接到mongos进程:

$ ./mongo localhost:30000/admin 

现在使用addshard数据库命令添加这个分片

>db.runCommand({addshard: “localhost:10000”, allowLocal:true}) { “added”:”localhost:10000”, “ok”:true } 

如果你运行分片在localhost才需要“allowLocal”这个键,让MongoDB知道你是在生产环境中,而且正在做什么。

数据分片

为了允许MongoDB分布数据,你必须开启数据和集合上分片。比如,启用数据库acme的分片功能:

>db.runCommand({“enablesharding”:”acme”}) 

一旦已经在数据库acme上启用,通过运行shardcollection命令对集合分片:

>db.runCommand({“shardcollection”:”acme.products”,”key”,:{“_id”:1}}) 

集合根据”_id”键实现了分片。当有数据被添加到acme上时,它会自动地根据”_id”值分布在分片上。

# 来源:Easyigloo


在微博上关注: 新浪, 腾讯   投稿

最新招聘

更多>>

相关 [mongodb] 推荐:

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.

【MongoDB】MongoDB之优化器Profiler

- - CSDN博客数据库推荐文章
在mysql数据库中,慢查询日志经常作为优化数据库的依据, mongodb中依然有类似的功能. Mongodb自带的profiler,可以方便地记录所有耗时的操作,以便于调优;. 一、开始profiler功能. 开启profier功能有两种:. 第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别.

夜说mongodb

- Lianhui Wang - NoSQLFan
前两天本站刚刚分享了wordnik使用MongoDB经验的文章:《Wordnik 的 MongoDB 使用经历》,今天又看到一位朋友对这方面做的总结,分享在这里,供大家参考. 赋闲以后很长没有更新博客了,说忙完全是借口,多半因为没有兴致所致. 今天凌晨比赛多多,趁着比赛的前奏和间隙,遂浏览些技术文章.

MongoDB与内存

- 高春辉 - 火丁笔记
但凡初次接触MongoDB的人,无不惊讶于它对内存的贪得无厌,至于个中缘由,我先讲讲Linux是如何管理内存的,再说说MongoDB是如何使用内存的,答案自然就清楚了. 据说带着问题学习更有效,那就先看一个MongoDB服务器的top命令结果:. 这台MongoDB服务器有没有性能问题. 先讲讲Linux是如何管理内存的.

白话MongoDB(一)

- Ease - 江边潮未尽,枫红一季秋
按照官方的说法,MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented )的数据库,采用C++开发. 注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储. 和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式.

MongoDB 索引

- - 博客园_首页
索引是用来加快查询的,数据库索引与数据的索引类似,有了索引就不需要翻遍整本书,数据库可以直接在索引中查找,. 使得查询速度很快,在索引中找到条目后,就可以直接跳转到目标文档的位置.. 要掌握如何为查询配置最佳索引会有些难度.. MongoDB索引几乎和关系型数据库的索引一样.绝大数优化关系型数据库索引的技巧同样适用于MongoDB..

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.

MongoDB Shareding部署

- - 开源小站
几年前写过 MongoDB的Sharding和replication. 其实现在看起来Replication还是可以,Sharding的部分有点过于简单了. 于是现在重新补充一下,至少也更新下,毕竟现在的MongoDB已经到了2.6,于当时的2.2还是有所差异的. 正常的情况下,应该是有6台主机实现一个比较像样的MongoDB Sharding集群,它们分别是mongos /router1台,config 3台,shard 2台.

MongoDB REST Api介绍

- peigen - NoSQLFan
MongoDB默认会开启一个HTTP协议的端口提供REST的服务,这个端口是你Server端口加上1000,比如你的Server端口为27017,那么这个HTTP端口就是28017,默认的HTTP端口功能是有限的,你可以通过添加–rest参数启动更多功能. 下面是在这个端口通过其RESTFul 的API操作MongoDB数据的几个例子,来源是MongoDB官方文档.