您的位置:首页 > 数据库 > Mongodb

Mongodb的副本集+分片部署

2013-03-18 16:18 381 查看
前面尝试了三种部署:
1.主从部署(Mongodb的主从部署)
2.副本集部署(Mongodb的副本集部署)
3.分片部署(Mongodb的分片部署)

现在尝试一下副本集+分片的部署,也就是比副本集多了分片的功能,在分片配置时,分片节点从单一mongod变成了一个集合。
参考资料(http://blog.csdn.net/irelandken/article/details/8003195)
步骤如下:
1.创建三个副本集
2.创建分片需要的Config Server,Route Process
3.配置分片(即把副本集添加为分片节点)
4.测试
我们还是在同一台机子192.168.0.188上用不同的端口模拟不同的机子进行部署:

1:创建三个副本集
------------------------------------------------------------------------------------------------------------------------------------
1.1第一个副本集:
创建目录:

mkdir -p /data/replset_sharding/replset1/r0
mkdir -p /data/replset_sharding/replset1/r1
mkdir -p /data/replset_sharding/replset1/r2
mkdir -p /data/replset_sharding/replset1/log




用后台运行的方式启动三个Mongod:

进入mongodb的启动目录bin运行下面的代码:

./mongod --dbpath /data/replset_sharding/replset1/r0 --replSet  replset1 --port 18010 --logpath=/data/replset_sharding/replset1/log/r0.log --logappend --fork --directoryperdb

./mongod --dbpath /data/replset_sharding/replset1/r1 --replSet  replset1 --port 18011 --logpath=/data/replset_sharding/replset1/log/r1.log --logappend --fork --directoryperdb

./mongod --dbpath /data/replset_sharding/replset1/r2 --replSet  replset1 --port 18012 --logpath=/data/replset_sharding/replset1/log/r2.log --logappend --fork --directoryperdb




初始化复本集:在Mongodb的启动目录运行下面代码,启动端口18010的shell:
./mongo --port 18010

config_replset1 = {
_id:"replset1",
members:
[
{_id:0,host:"192.168.0.188:18010",priority:4},
{_id:1,host:"192.168.0.188:18011",priority:2},
{_id:2,host:"192.168.0.188:18012",arbiterOnly : true}
]
}
rs.initiate(config_replset1);

ps:注意arbiter仲裁节点只投票,不接收复制的数据!




------------------------------------------------------------------------------------------------------------------------------------

1.2第二个副本集:
创建目录:
mkdir -p /data/replset_sharding/replset2/r0
mkdir -p /data/replset_sharding/replset2/r1
mkdir -p /data/replset_sharding/replset2/r2
mkdir -p /data/replset_sharding/replset2/log
以后台的方式启动三个mogod:
./mongod --dbpath /data/replset_sharding/replset2/r0 --replSet replset2 --port 28010 --logpath=/data/replset_sharding/replset2/log/r0.log --logappend --fork --directoryperdb

./mongod --dbpath /data/replset_sharding/replset2/r1 --replSet replset2 --port 28011 --logpath=/data/replset_sharding/replset2/log/r1.log --logappend --fork --directoryperdb

./mongod --dbpath /data/replset_sharding/replset2/r2 --replSet replset2 --port 28012 --logpath=/data/replset_sharding/replset2/log/r2.log --logappend --fork --directoryperdb

初始化复本集:在Mongodb的启动目录运行下面代码,启动端口28010的shell:
./mongo --port 28010

config_replset2 = {
_id:"replset2",
members:
[
{_id:0,host:"192.168.0.188:28010",priority:4},
{_id:1,host:"192.168.0.188:28011",priority:2},
{_id:2,host:"192.168.0.188:28012",arbiterOnly : true}
]
}
rs.initiate(config_replset2);


------------------------------------------------------------------------------------------------------------------------------------

1.3第三个副本集:
创建目录:
mkdir -p /data/replset_sharding/replset3/r0
mkdir -p /data/replset_sharding/replset3/r1
mkdir -p /data/replset_sharding/replset3/r2
mkdir -p /data/replset_sharding/replset3/log
以后台的方式启动三个mogod:
./mongod --dbpath /data/replset_sharding/replset3/r0 --replSet replset3 --port 38010 --logpath=/data/replset_sharding/replset3/log/r0.log --logappend --fork --directoryperdb

./mongod --dbpath /data/replset_sharding/replset3/r1 --replSet replset3 --port 38011 --logpath=/data/replset_sharding/replset3/log/r1.log --logappend --fork --directoryperdb

./mongod --dbpath /data/replset_sharding/replset3/r2 --replSet replset3 --port 38012 --logpath=/data/replset_sharding/replset3/log/r2.log --logappend --fork --directoryperdb

初始化复本集:在Mongodb的启动目录运行下面代码,启动端口38010的shell:
./mongo --port 38010

config_replset3 = {
_id:"replset3",
members:
[
{_id:0,host:"192.168.0.188:38010",priority:4},
{_id:1,host:"192.168.0.188:38011",priority:2},
{_id:2,host:"192.168.0.188:38012",arbiterOnly : true}
]
}
rs.initiate(config_replset3);


------------------------------------------------------------------------------------------------------------------------------------

2:创建分片需要的Config Server,Route Process

-------------------------------------------------------------------------------------------------------------------
2.1启动config Server:40000
创建目录:
mkdir -p /data/replset_sharding/log
mkdir -p /data/replset_sharding/config

进入mongodb的启动bin目录以后台的方式启动:
./mongod --dbpath /data/replset_sharding/config --configsvr --port 40000 --logpath /data/replset_sharding/log/config.log --fork --directoryperdb --rest



-------------------------------------------------------------------------------------------------------------------

2.2启动Route Process:50000
./mongos --port 50000 --configdb 192.168.0.188:40000 --chunkSize 50 --logpath=/data/replset_sharding/log/route.log --fork


-------------------------------------------------------------------------------------------------------------------

3:配置分片(即把副本集添加为分片节点)
用Mongo Shell 登录 Route Process

./mongo --port 50000

use admin
(记得执行这一点,切换到admin数据库)

//添加分片节点,每个分片都是一个副本集
db.runCommand({addshard:"replset1/192.168.0.188:18010,192.168.0.188:18011,192.168.0.188:18012",allowLocal:true})
db.runCommand({addshard:"replset2/192.168.0.188:28010,192.168.0.188:28011,192.168.0.188:28012",allowLocal:true})
db.runCommand({addshard:"replset3/192.168.0.188:38010,192.168.0.188:38011,192.168.0.188:38012",allowLocal:true})

(allowLocal:true仅仅开发时才将分片配置到本地,生产时不能这样)-----------------------------------------------------------------------------------


用mongovue连接这几个端口,观察结果:





你会发觉,arbiter仲裁节点因为不接收数据,所以直接被mongos在配置阶段就去掉,db.runCommand({addshard:"replset1/192.168.0.188:18010,[b]192.168.0.188:18011,192.168.0.188:18012",allowLocal:true})[/b]等价于:db.runCommand({addshard:"replset1/[b]192.168.0.188:18010,192.168.0.188:18011",allowLocal:true})[/b]

4:测试

4.1.对数据库mytest启用分片
登录Mongo Shell
./mongo --port 50000

use admin
db.runCommand({enablesharding:"mytest"})




在Mongovue中可以看到 启用分片的数据库已经在config的databases中有登记:



这里以副本集1为基片

4.2对数据库mytest中的集合student启用分片,设置片键为_id

递增片键方式
use admin
db.runCommand({shardcollection:"mytest.student",key:{_id:1}})






4.3分片集群插入数据测试:测试插入60万条数据Mongo Shell中运行
use mytest
for(var i=1; i<=600000; i++) db.student.insert({age:i,name:"mary",addr:"guangzhou",country:"China"})


在config的chunks可以看到分了多少片,以及片键的最小到最大的范围


3个replset里可以看到相应的mytest数据库和student集合:



部署成功!

PS:分片的管理(增删与Mongodb的分片部署一样)
目前的分片结构是:



在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。
在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。



或者



详情可查看 http://blog.jobbole.com/72643/
摘抄操作部分记录如下:
1、准备机器,IP分别设置为: 192.168.0.136、192.168.0.137、192.168.0.138。
2、分别在每台机器上建立mongodb分片对应测试文件夹。

#存放mongodb数据文件
mkdir -p /data/mongodbtest

#进入mongodb文件夹
cd /data/mongodbtest

#存放mongodb数据文件
mkdir -p /data/mongodbtest

#进入mongodb文件夹
cd /data/mongodbtest

3、下载mongodb的安装程序包
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.8.tgz
#解压下载的压缩包
tar xvzf mongodb-linux-x86_64-2.4.8.tgz
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.8.tgz
#解压下载的压缩包
tar xvzf mongodb-linux-x86_64-2.4.8.tgz

4、分别在每台机器建立mongos 、config 、 shard1 、shard2、shard3 五个目录。
因为mongos不存储数据,只需要建立日志文件目录即可。

#建立mongos目录
mkdir -p /data/mongodbtest/mongos/log

#建立config server 数据文件存放目录
mkdir -p /data/mongodbtest/config/data

#建立config server 日志文件存放目录
mkdir -p /data/mongodbtest/config/log

#建立config server 日志文件存放目录
mkdir -p /data/mongodbtest/mongos/log

#建立shard1 数据文件存放目录
mkdir -p /data/mongodbtest/shard1/data

#建立shard1 日志文件存放目录
mkdir -p /data/mongodbtest/shard1/log

#建立shard2 数据文件存放目录
mkdir -p /data/mongodbtest/shard2/data

#建立shard2 日志文件存放目录
mkdir -p /data/mongodbtest/shard2/log

#建立shard3 数据文件存放目录
mkdir -p /data/mongodbtest/shard3/data

#建立shard3 日志文件存放目录
mkdir -p /data/mongodbtest/shard3/log

#建立mongos目录
mkdir -p /data/mongodbtest/mongos/log

#建立config server 数据文件存放目录
mkdir -p /data/mongodbtest/config/data

#建立config server 日志文件存放目录
mkdir -p /data/mongodbtest/config/log

#建立config server 日志文件存放目录
mkdir -p /data/mongodbtest/mongos/log

#建立shard1 数据文件存放目录
mkdir -p /data/mongodbtest/shard1/data

#建立shard1 日志文件存放目录
mkdir -p /data/mongodbtest/shard1/log

#建立shard2 数据文件存放目录
mkdir -p /data/mongodbtest/shard2/data

#建立shard2 日志文件存放目录
mkdir -p /data/mongodbtest/shard2/log

#建立shard3 数据文件存放目录
mkdir -p /data/mongodbtest/shard3/data

#建立shard3 日志文件存放目录
mkdir -p /data/mongodbtest/shard3/log
5、规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.

6、在每一台服务器分别启动配置服务器。

/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --configsvr --dbpath /data/mongodbtest/config/data --port 21000 --logpath /data/mongodbtest/config/log/config.log --fork

/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --configsvr --dbpath /data/mongodbtest/config/data --port 21000 --logpath /data/mongodbtest/config/log/config.log --fork

7、在每一台服务器分别启动mongos服务器。

/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongos --configdb 192.168.0.136:21000,192.168.0.137:21000,192.168.0.138:21000 --port 20000 --logpath /data/mongodbtest/mongos/log/mongos.log --fork

/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongos --configdb 192.168.0.136:21000,192.168.0.137:21000,192.168.0.138:21000 --port 20000 --logpath /data/mongodbtest/mongos/log/mongos.log --fork

8、配置各个分片的副本集。

#在每个机器里分别设置分片1服务器及副本集shard1
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodbtest/shard1/data --logpath /data/mongodbtest/shard1/log/shard1.log --fork --nojournal --oplogSize 10

#在每个机器里分别设置分片1服务器及副本集shard1
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodbtest/shard1/data --logpath /data/mongodbtest/shard1/log/shard1.log --fork --nojournal --oplogSize 10
为了快速启动并节约测试环境存储空间,这里加上 nojournal 是为了关闭日志信息,在我们的测试环境不需要初始化这么大的redo日志。同样设置 oplogsize是为了降低 local 文件的大小,oplog是一个固定长度的 capped collection,它存在于”local”数据库中,用于记录Replica Sets操作日志。注意,这里的设置是为了测试!

#在每个机器里分别设置分片2服务器及副本集shard2
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodbtest/shard2/data --logpath /data/mongodbtest/shard2/log/shard2.log --fork --nojournal --oplogSize 10

#在每个机器里分别设置分片2服务器及副本集shard2
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodbtest/shard2/data --logpath /data/mongodbtest/shard2/log/shard2.log --fork --nojournal --oplogSize 10

#在每个机器里分别设置分片3服务器及副本集shard3
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodbtest/shard3/data --logpath /data/mongodbtest/shard3/log/shard3.log --fork --nojournal --oplogSize 10

#在每个机器里分别设置分片3服务器及副本集shard3
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodbtest/shard3/data --logpath /data/mongodbtest/shard3/log/shard3.log --fork --nojournal --oplogSize 10
分别对每个分片配置副本集,深入了解副本集参考本系列前几篇文章。

任意登陆一个机器,比如登陆192.168.0.136,连接mongodb

#设置第一个分片副本集
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22001

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard1", members:[
{_id:0,host:"192.168.0.136:22001"},
{_id:1,host:"192.168.0.137:22001"},
{_id:2,host:"192.168.0.138:22001",arbiterOnly:true}
]
}

#初始化副本集配置
rs.initiate(config);

#设置第二个分片副本集
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22002

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard2", members:[
{_id:0,host:"192.168.0.136:22002"},
{_id:1,host:"192.168.0.137:22002"},
{_id:2,host:"192.168.0.138:22002",arbiterOnly:true}
]
}

#初始化副本集配置
rs.initiate(config);

#设置第三个分片副本集
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22003

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard3", members:[
{_id:0,host:"192.168.0.136:22003"},
{_id:1,host:"192.168.0.137:22003"},
{_id:2,host:"192.168.0.138:22003",arbiterOnly:true}
]
}

#初始化副本集配置
rs.initiate(config);

#设置第一个分片副本集
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22001

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard1", members:[
{_id:0,host:"192.168.0.136:22001"},
{_id:1,host:"192.168.0.137:22001"},
{_id:2,host:"192.168.0.138:22001",arbiterOnly:true}
]
}

#初始化副本集配置
rs.initiate(config);

#设置第二个分片副本集
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22002

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard2", members:[
{_id:0,host:"192.168.0.136:22002"},
{_id:1,host:"192.168.0.137:22002"},
{_id:2,host:"192.168.0.138:22002",arbiterOnly:true}
]
}

#初始化副本集配置
rs.initiate(config);

#设置第三个分片副本集
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22003

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard3", members:[
{_id:0,host:"192.168.0.136:22003"},
{_id:1,host:"192.168.0.137:22003"},
{_id:2,host:"192.168.0.138:22003",arbiterOnly:true}
]
}

#初始化副本集配置
rs.initiate(config);
9、目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

#连接到mongos
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:20000

#使用admin数据库
user admin

#串联路由服务器与分配副本集1
db.runCommand( { addshard : "shard1/192.168.0.136:22001,192.168.0.137:22001,192.168.0.138:22001"});

#连接到mongos
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:20000

#使用admin数据库
user admin

#串联路由服务器与分配副本集1
db.runCommand( { addshard : "shard1/192.168.0.136:22001,192.168.0.137:22001,192.168.0.138:22001"});
如里shard是单台服务器,用 db.runCommand( { addshard : “[: ]” } )这样的命令加入,如果shard是副本集,用db.runCommand( { addshard : “replicaSetName/[:port][,serverhostname2[:port],…]” });这样的格式表示 。

#串联路由服务器与分配副本集2
db.runCommand( { addshard : "shard2/192.168.0.136:22002,192.168.0.137:22002,192.168.0.138:22002"});

#串联路由服务器与分配副本集2
db.runCommand( { addshard : "shard2/192.168.0.136:22002,192.168.0.137:22002,192.168.0.138:22002"});

#串联路由服务器与分配副本集3
db.runCommand( { addshard : "shard3/192.168.0.136:22003,192.168.0.137:22003,192.168.0.138:22003"});

#串联路由服务器与分配副本集3
db.runCommand( { addshard : "shard3/192.168.0.136:22003,192.168.0.137:22003,192.168.0.138:22003"});

#查看分片服务器的配置
db.runCommand( { listshards : 1 } );

#查看分片服务器的配置
db.runCommand( { listshards : 1 } );
#内容输出

{
"shards" : [
{
"_id" : "shard1",
"host" : "shard1/192.168.0.136:22001,192.168.0.137:22001"
},
{
"_id" : "shard2",
"host" : "shard2/192.168.0.136:22002,192.168.0.137:22002"
},
{
"_id" : "shard3",
"host" : "shard3/192.168.0.136:22003,192.168.0.137:22003"
}
],
"ok" : 1
}

{
"shards" : [
{
"_id" : "shard1",
"host" : "shard1/192.168.0.136:22001,192.168.0.137:22001"
},
{
"_id" : "shard2",
"host" : "shard2/192.168.0.136:22002,192.168.0.137:22002"
},
{
"_id" : "shard3",
"host" : "shard3/192.168.0.136:22003,192.168.0.137:22003"
}
],
"ok" : 1
}
因为192.168.0.138是每个分片副本集的仲裁节点,所以在上面结果没有列出来。
10、目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片,就差那么一点点,一点点。。。连接在mongos上,准备让指定的数据库、指定的集合分片生效。

#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});

#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});

#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!
11、测试分片配置结果。

#连接mongos服务器
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:20000

#连接mongos服务器
/data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:20000

#使用testdb
use testdb;

#使用testdb
use testdb;

#插入测试数据
for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,"test1":"testval1"});

#插入测试数据
for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,"test1":"testval1"});

#查看分片情况如下,部分无关信息省掉了
db.table1.stats();

#查看分片情况如下,部分无关信息省掉了
db.table1.stats();
{
"sharded" : true,
"ns" : "testdb.table1",
"count" : 100000,
"numExtents" : 13,
"size" : 5600000,
"storageSize" : 22372352,
"totalIndexSize" : 6213760,
"indexSizes" : {
"_id_" : 3335808,
"id_1" : 2877952
},
"avgObjSize" : 56,
"nindexes" : 2,
"nchunks" : 3,
"shards" : {
"shard1" : {
"ns" : "testdb.table1",
"count" : 42183,
"size" : 0,
...
"ok" : 1
},
"shard2" : {
"ns" : "testdb.table1",
"count" : 38937,
"size" : 2180472,
...
"ok" : 1
},
"shard3" : {
"ns" : "testdb.table1",
"count" :18880,
"size" : 3419528,
...
"ok" : 1
}
},
"ok" : 1
}

{
"sharded" : true,
"ns" : "testdb.table1",
"count" : 100000,
"numExtents" : 13,
"size" : 5600000,
"storageSize" : 22372352,
"totalIndexSize" : 6213760,
"indexSizes" : {
"_id_" : 3335808,
"id_1" : 2877952
},
"avgObjSize" : 56,
"nindexes" : 2,
"nchunks" : 3,
"shards" : {
"shard1" : {
"ns" : "testdb.table1",
"count" : 42183,
"size" : 0,
...
"ok" : 1
},
"shard2" : {
"ns" : "testdb.table1",
"count" : 38937,
"size" : 2180472,
...
"ok" : 1
},
"shard3" : {
"ns" : "testdb.table1",
"count" :18880,
"size" : 3419528,
...
"ok" : 1
}
},
"ok" : 1
}
可以看到数据分到3个分片,各自分片数量为: shard1 “count” : 42183,shard2 “count” : 38937,shard3 “count” : 18880。已经成功了!不过分的好像不是很均匀,所以这个分片还是很有讲究的,后续再深入讨论。
12、java程序调用分片集群,因为我们配置了三个mongos作为入口,就算其中哪个入口挂掉了都没关系,使用集群客户端程序如下:

public class TestMongoDBShards {

public static void main(String[] args) {

try {
List<ServerAddress> addresses = new ArrayList<ServerAddress>();
ServerAddress address1 = new ServerAddress("192.168.0.136" , 20000);
ServerAddress address2 = new ServerAddress("192.168.0.137" , 20000);
ServerAddress address3 = new ServerAddress("192.168.0.138" , 20000);
addresses.add(address1);
addresses.add(address2);
addresses.add(address3);

MongoClient client = new MongoClient(addresses);
DB db = client.getDB( "testdb" );
DBCollection coll = db.getCollection( "table1" );

BasicDBObject object = new BasicDBObject();
object.append( "id" , 1);

DBObject dbObject = coll.findOne(object);

System. out .println(dbObject);

} catch (Exception e) {
e.printStackTrace();
}
}
}

public class TestMongoDBShards {

public static void main(String[] args) {

try {
List<ServerAddress> addresses = new ArrayList<ServerAddress>();
ServerAddress address1 = new ServerAddress("192.168.0.136" , 20000);
ServerAddress address2 = new ServerAddress("192.168.0.137" , 20000);
ServerAddress address3 = new ServerAddress("192.168.0.138" , 20000);
addresses.add(address1);
addresses.add(address2);
addresses.add(address3);

MongoClient client = new MongoClient(addresses);
DB db = client.getDB( "testdb" );
DBCollection coll = db.getCollection( "table1" );

BasicDBObject object = new BasicDBObject();
object.append( "id" , 1);

DBObject dbObject = coll.findOne(object);

System. out .println(dbObject);

} catch (Exception e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: