我正在尝试以编程方式“启用分片”并使用java / scala API设置“分片键”,特别是casbah
我们的配置
scala 2.10
casbah 2.6 - "org.mongodb" % "casbah_2.10" % "2.6.0",
MongoDB 2.4.4
mongo 2.4.4(scala 2.10)的casbah驱动程序版本是什么
我们的用例是这样的,使用casbah scala API dbConnection.getCollection(....)
和collection.ensureIndex(DBObject("orgId" -> 1), DBObject("background" -> true, "name" -> "org_idx", "unique" -> false))
是否有一个等效的casbah API以编程方式,enableSharding并选择shardKey以及我们正在分割我们的mongo集群以进行扩展。 我们的数据库+集合名称是提前知道的,并且是使用API动态创建的,因此使用mongo shell启用分片根本不是一个选项。
有更好的方法吗?任何建议?
答案 0 :(得分:1)
这对我有用,建立在@ Ross的答案上,这对我来说并不适用:
import com.mongodb.casbah.Imports._
// Connect to MongoDB
val conn = MongoClient()
val adminDB = conn("admin")
// Enable sharding on the DB
adminDB.command(MongoDBObject("enableSharding" -> <database>))
// Create the index for our shard key
val shardKey = MongoDBObject("_id" -> "hashed")
conn(<database>)(<collection>).ensureIndex(shardKey)
// Enable sharding on the collection
adminDB.command(MongoDBObject("shardCollection" -> "<database>.<collection>",
"key" -> shardkey))
答案 1 :(得分:0)
为了完整性并帮助他人 - enableSharding
是一个命令(请参阅enableSharding docs),您可以使用db.command
从casbah运行任何命令。
import com.mongodb.casbah.Imports._
// Connect to MongoDB
val conn = MongoClient()
val adminDB = conn("admin")
// Enable sharding
adminDB.command(MongoDBObject("shardCollection" -> "<database>.<collection>", "key" -> <shardkey>))
该部分应该是定义shardkey的MongoDBObject。
Asya提到这可能不是您的用例的正确解决方案,但它当然可以使用casbah实用。