使用casbah和Mongo 2.4以编程方式启用分片+选择集合上的分片键

时间:2013-06-10 03:01:33

标签: mongodb scala casbah

我正在尝试以编程方式“启用分片”并使用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启用分片根本不是一个选项。

有更好的方法吗?任何建议?

2 个答案:

答案 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实用。