MongoDB通过JavaDriver执行shell命令,例如创建sharding collection
Mongodb的java driver本身的接口
void createCollection(String collectionName, CreateCollectionOptions createCollectionOptions)
是不支持创建一个sharding collection的,通过此方式创建的collection不支持分片,即此表存放在一个节点上。传统的方式是通过mongodb的shell命令(见之前的文章),如
sh.shardCollection("dbname.tablename", {"_id": "hashed"}) to create a shard table hashed by _id
但是这种方式也有一定的制约,不能通过程序动态的添加表,如果我默认的表不足以支撑业务,就必须通过shell方式创建一个sharding表,之后再插入数据才能满足要求。
通过javadoc的查询,MongoDatabase存在如下接口:
Document runCommand(Bson command)
也就是说,通过此接口可以执行runCommand命令。而runCommand命令是什么呢?通过官方reference(https://docs.mongodb.com/manual/reference/command/shardCollection/)的查询,我们看到如下说明:
Shards a collection to distribute its documents across shards. You must run enableSharding on a database before running the shardCollection command. The shardCollection command must be run against the admin database. To run shardCollection, use the db.runCommand( { <command> } ) method. shardCollection has the following form: {
shardCollection: "<database>.<collection>",
key: <shardkey>,
unique: <boolean>,
numInitialChunks: <integer>,
collation: { locale: "simple" }
}
也就是说,我们可以通过shell命令,执行db.runCommand({shardCollection:"db.collection", key: {"_id": "hashed"}})来执行此命令。
对于java driver而言,我们只要把命令中的json当参数调用runCommand应当就可以实现创建sharding表了。
接下来看java driver的接口,传递参数是一个Bson,之前我们进行查询以及过滤时生成过Bson,不过那些model显然不全,只是为了查询方便Mongodb帮我们建好的,里面并不包含shardCollection。于是去javadoc找到对应的Bson:
http://mongodb.github.io/mongo-java-driver/3.4/javadoc/
里面有
Interface Bson
找到此Interface后看下面有哪些类implement了此接口。
Class BasicDBObject
接下来去此BasicDBObject页面看看怎么用就可以了,具体实现方式为:
lazy val mongoURI = new MongoClientURI(new MongoUserUtils().origin2URI)
lazy val mongo = new MongoClient(mongoURI)
//这里必须是admin,只有admin库才有创建shardingcollection的权限。
lazy val db = mongo.getDatabase("admin")
val bs = new BasicDBObject()
bs.append("shardCollection", "test.testsharding2")
bs.append("key", mapAsJavaMap(Map(("_id", "hashed"))))
println(bs.toJson())
db.runCommand(bs)
MongoDB通过JavaDriver执行shell命令,例如创建sharding collection的更多相关文章
- python(6)-执行shell命令
可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen* --废弃 popen2.* --废弃 commands.* ...
- Android执行shell命令
一.方法 /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/bin/cat", &q ...
- loadrunner调用plink,远程linux执行shell命令
loadrunner调用plink,远程linux执行shell命令 脚本: Action() { char* cmd; cmd = lr_eval_string("C:\\\&qu ...
- python 执行shell命令
1.os模块中的os.system()这个函数来执行shell命令 1 2 3 >>> os.system('ls') anaconda-ks.cfg install.log i ...
- python2.7执行shell命令
python学习——python中执行shell命令 2013-10-21 17:44:33 标签:python shell命令 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者 ...
- 在 Ruby 中执行 Shell 命令的 6 种方法
我们时常会与操作系统交互或在 Ruby 中执行 Shell 命令.Ruby为我们提供了完成该任务的诸多方法. Exec Kernel#exec 通过执行给定的命令来替换当前进程,例如: $ irb & ...
- Android执行shell命令 top ps
Android执行shell命令 一.方法 /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/ ...
- 第3节 sqoop:7、通过java代码远程连接linux执行shell命令
数据库的数据同步软件sqoop 数据同步 关系型数据库到大数据平台 任务:sqoop 是批量导入数据太慢,如何做到实时的数据同步 实时的数据同步工具: canal 阿里开源的一个数据库数据实时同步的软 ...
- 【Hadoop离线基础总结】通过Java代码执行Shell命令
通过Java代码执行Shell命令 需求 在实际工作中,总会有些时候需要我们通过java代码通过远程连接去linux服务器上面执行一些shell命令,包括一些集群的状态管理,执行任务,集群的可视化界面 ...
随机推荐
- Python基础数据类型str字符串
3.3字符串str ' ' 0 切片选取 [x:y] 左闭右开区间 [x:y:z] 选取x到y之间 每隔z选取一次(选取x,x+z,....) z为正 索引位置:x在y的左边 z为负 索引位置:x在y ...
- Git-版本控制 (三)
前面两篇我们成功安装了Git,并且成功创建了我们的版本库. 创建了版本库,怎么可以不往里面放内容呢,所以今天的任务就是学会将文件放入至我们的版本库中...... 首先,我们点开我们的"Git ...
- google浏览器切换成中文
新浪下载地址:http://down.tech.sina.com.cn/content/40975.html 默认字体好像是西班牙语 1.浏览器地址chrome://settings/language ...
- 面试必备:GET和POST的用法和区别
版权声明一:本文为博主原创文章,转载请附上原文出处链接和本声明.版权声明二:本网站的所有作品会及时更新,欢迎大家阅读后发表评论,以利作品的完善.版权声明三:对不遵守本声明或其他违法.恶意使用本网内容者 ...
- ES分布式原理
参考:https://blog.csdn.net/chang384915878/article/details/86747419 一.准备知识 这里只是简单的介绍,详情可以看我的另一篇博客:https ...
- markdown的日常使用
# POI前端接口 ``` 描述: 项目poi接口 作者: X-Wolf 时间: -- ``` ------ [TOC] ------ ##声明 ### 请求地址 ``` DOMAIN/strateg ...
- kill - 终止进程
SYNOPSIS(总览) kill[-ssignal|-p][-a]pid... kill -l [ signal ] DESCRIPTION (描述) kill 给指定进程发送指定信号. 如果没有指 ...
- Python中绘制箭头
以两个点为例,其中起点为点(1,2),终点为点(3,4) import matplotlib.pyplot as plt def drawArrow(A,B): fig = plt.figure() ...
- Prism MVVM使用WPF的DataGrid控件
此项目源码下载地址:https://github.com/lizhiqiang0204/PrismDataGird01 运行效果如下 前端代码如下 <Window x:Class="V ...
- BZOJ - 2243 染色 (LCT链修改+链查询)
同样是可以用LCT解决的树剖问题之一. 注意反转的时候要考虑对左右端点颜色的影响,而且要先反转再打标记(这点不知道为啥) #include<bits/stdc++.h> using nam ...