`
songzi0206
  • 浏览: 159046 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
Group-logo
All are from ...
浏览量:33844
Group-logo
Programming w...
浏览量:19714
社区版块
存档分类
最新评论

mongodb 分片

阅读更多

       接着上一篇,本文来记录下mongodb 的自动分片功能。

       Mongodb支持自动分片和划分架构,可以利用它构建一个水平扩展的数据库集群系统,将数据库分表存储在各个sharding节点上。本文接着上一篇的例子,来简单尝试一下这个”auto sharding”功能。在开始之前,先简要介绍下Sharding ,下面对sharding的介绍基本来自官网的文档http://www.mongodb.org/display/DOCS/Sharding+Introduction

       Sharding就是将数据按照一定顺序的分割、分片存储到不同机器的一种方式。举例来说:我们想把users集合根据其所在的州进行分片存储到三台机器上,那么这三台机器作为shard serverusers集合可能会根据机器分为: 



 

       这样,每个机器都会根据users所在的州来存储大量的user数据块。MongoDb会均衡的将这些数据块分布存储在这三台机器上。这种分块的机制,只有在数据量达到sharding 设置的量时候才会起作用。

       通过这种分片之后,应用程序可以通过mongos进程与shard集群交互。Mongos是一个mongodb server的一个进程,它能够将应用程序对数据库的操作路由到适当的shard机器上。从应用程序角度看,它只是跟一个单一的数据库链接。

      那么何时分片呢?一般机器磁盘不够用时,或者单个mongod已经无法满足写数据的性能时,或者想将大量数据放到内存中提高性能时,可以考虑分片了。

       Mongodb分片有三部分组成:

1) 片:Shard Server,用来存储片数据,生产环境一个分片服务会由多台服务器组成一个副本集,避免单点故障(这里先不考虑这个)

2) 配置服务器:Config Server,用来存储集群的元数据,数据和片的对应关系;

3) Routing Server,即Mongos进程,它本身不存储数据,只是用来路由所有请求,并把结果聚合。

 

下面开始分片操作,这里只用一个机器来做所有操作,旨在学习:

1)      启动两个片:

mongod –shardsvr –port 10000 –dbpath c:\mongodata\shard0 –logpath c:\mongodata\log\shard0.log

mongod –shardsvr –port 10001 –dbpath c:\mongodata\shard1 –logpath c:\mongodata\log\shard1.log

      我这是window系统,命令就不解释了。

2)      启动配置服务:

mongod --configsvr --port:20000 –dbpath c:\mongodata\config  –logpath  c:\mongodata\log\config.log

3)      启动路由(mongos)进程:

mongos –configdb localhost:20000 –logpath c:\mongodata\log\server.log –chunkSize 1

指定chunk大小为1M,当数据大于1M时候就会开始分片存储了。

          现在可以通过客户端连接到路由进程:mongo –port 27017 (由上一篇可知,这是默认端口),添加分片命令:

db.runCommand({addshard:”localhost:10000”})

db.runCommand({addshard:”localhost:10001”})

db.runCommand({“enablesharding”:”testDB”})

db.runCommand({shardcollection:”testDB.stores”,key:{“_id”:1}}) //_id为键对stores集合进行分片

 

          接下来测试,还是使用上一篇的demo所用的程序,当为stores集合添加了2000条数据时,查询,发现所有数据都在第一片(shard0)里,当我添加了100 00 条数据时候,再次查看:

 

 

        貌似不太均匀,其实这时正常的,再继续添加数据时,两边的比例会变动,这和片键的选择有关系。应用程序查找和插入几乎不受影响。但是查找***地最近的***店时,报了异常,提示说用geoNear command 来代替$near查询,我以为是morphia或者mongodb java 驱动的一个issue,但是在shell端查找也报错了,郁闷哦!详细是这样的:

假如我链接到任意一个片,查找离[23,25]最近的两个stores,结果是可行的:

 

 

假如我是链接到路由进程,这样查找就会报错:

 

 

我通过geoNear 命令运行貌似结果也不对!目前我没弄清是什么原因。

 

  • 大小: 32.1 KB
  • 大小: 31.3 KB
  • 大小: 33.3 KB
  • 大小: 16.2 KB
分享到:
评论
1 楼 songzi0206 2012-01-03  
今天查看了下manual,发现是我用错geoCommand命令了,用geoCommand不需要指定具体的geo2d索引列,直接这样就没问题: db.runCommand({geoNear:"stores",near:[23,34],num:3}),其中geoNear只要指定集合就ok,上次失败是因为我多此一举的用了stores.place.loc,^_^。
   至于在java这边,也比较简单的,借助下BasicDBObjectBuilder来构建command对象:
BasicDBObjectBuilder documentBuilder = BasicDBObjectBuilder.start().add("geoNear", "stores").add("near",p.getLoc()).add("num", 3);
//.add("maxDistance", 10)
cmd = documentBuilder.get();
CommandResult cr = ds.getDB().command(cmd);

这样就没问题了。

相关推荐

    MongoDB分片介绍

    以下是对MongoDB分片的详细说明: 1. **启动相关进程** - **Shard Server**: 在分片服务器上,需要启动`mongod`进程,并添加`--shardsvr`参数。如果是主从模式,还需使用`--pairwith`指定其伙伴节点。 - **Config...

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...

    mongodb分片备份

    本文将详细介绍MongoDB的分片备份以及复制集的备份方法。 **1. 分片备份** MongoDB 分片是将大数据集分散到多个物理节点上,以提高查询性能和存储容量。分片备份主要涉及配置服务器(Config Server)的备份。配置...

    实验五 MongoDB分片部署与启动

    ### 实验五 MongoDB分片部署与启动 #### 实验综述 本次实验旨在深入学习MongoDB的分片机制,理解并掌握如何部署一个基于多服务器的MongoDB分片集群。分片是MongoDB的一项重要特性,它允许将数据分散存储在多个物理...

    mongodb分片集群增加acl

    MongoDB分片集群是一种分布式数据存储结构,可以实现水平扩展。分片集群由三部分组成:mongos路由服务器、config配置服务器和多个分片节点。mongos作为路由服务器,负责接收客户端请求并将其转发到正确的分片。...

    mongodb分片设计

    MongoDB分片设计是针对大数据量的存储和处理提出的解决方案。在大数据环境下,单个数据库服务器往往难以满足高性能和高可用性的需求。MongoDB通过分片(Sharding)技术来解决这个问题。分片是一种将数据分散存储在多...

    MongoDB分片副本级

    MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置

    13、MongoDB分片集群&高级集群架构详解-ev.rar

    13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    mongodb分片

    MongoDB的分片技术是一种用于处理大数据量的分布式数据库策略,它通过将数据水平分割并分布在多个服务器上,以提高存储容量和数据处理性能。在MongoDB中,分片(Sharding)是解决大规模数据存储和高并发访问的有效...

    mongodb分片linux安装文档

    MongoDB 分片是大型数据库系统中用于横向扩展存储能力的关键技术。在 CentOS 7 上部署 MongoDB 分片集群是一项复杂但必要的任务,特别是当处理大量数据并需要高效读写性能时。以下是一个详细的步骤指南,涵盖了从...

    mongoDB分片技术处理方案

    一、MongoDB分片概念 1. 分片集群:由多个MongoDB服务器组成的系统,包括分片服务器、路由进程(Mongos)和配置服务器(Config Server)。路由进程负责处理客户端请求,确定数据应存储或检索的位置,并将请求转发到...

    深入理解MongoDB分片的管理

    MongoDB的分片技术是为了解决大数据存储和高性能需求而设计的一种分布式数据库解决方案。...通过深入了解和熟练掌握这些概念,可以更好地管理和优化MongoDB分片集群,以应对大规模数据处理的挑战。

    MongoDB分片详细教程

    ### MongoDB分片技术详解 #### 一、MongoDB分片概念 MongoDB 分片是一种将数据分布在网络中的多个服务器上的方法。它通过水平分割数据来提高可伸缩性和性能,适用于处理大量数据和高并发访问场景。分片的核心组件...

    mongodb分片与副本集详细配置方案

    MongoDB 是一个高性能、分布式、开源的文档型数据库,它支持分片(sharding)和副本集(replica sets)来实现水平扩展和高可用性。分片是将数据分散到多个物理节点上,以处理大数据量和高并发场景;副本集则是为了...

    mongodb分片集群安装包

    首先,我们需要了解MongoDB分片的概念。在MongoDB中,分片(Sharding)是指将数据分布在多个物理节点上,以实现水平扩展,即增加存储容量和处理能力。每个分片可以看作是数据库的一部分,它们共同承载整个数据库的...

    MongoDB分片集群搭建教程:副本集创建与数据分片

    内容概要:本文提供了详细的MongoDB分片集群的搭建指导,涵盖了从环境准备、配置文件编写、副本集的建立、主节点的选择、配置服务器和数据分片服务器的配置到最后的路由节点的搭建与操作整个流程,以及对数据库的...

    Mongodb分片副本集集群搭建

    MongoDB分片副本集集群搭建的知识点包含了以下几个方面: 1. MongoDB分片架构的基本组成:MongoDB分片架构由mongos(路由服务器)、config-server(配置服务器)和shard(分片服务器)三部分组成。mongos负责作为...

    第5章 MongoDB分片.zip

    MongoDB分片集群由以下组件组成: - **分片服务器(Shard)**:实际存储数据的MongoDB实例。 - **路由进程(Mongos)**:客户端与数据库之间的中间层,负责查询路由和数据分发。 - **配置服务器(Config Server...

    MongoDB分片实例.pdf

    以下是对MongoDB分片实例的详细说明: 1. **MongoDB 分片结构** - **客户端(Client)**:应用程序与MongoDB交互的接口。 - **mongos(路由服务器)**:作为客户端与数据存储之间的中间层,负责数据的路由和分发...

Global site tag (gtag.js) - Google Analytics