2

我正在尝试以编程方式“启用分片”并使用 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 的 casbah 驱动程序版本(带有 scala 2.10)

我们的用例是这样的,集合 + 索引是使用 casbah scala API 以编程方式创建的dbConnection.getCollection(....),并且 collection.ensureIndex(DBObject("orgId" -> 1), DBObject("background" -> true, "name" -> "org_idx", "unique" -> false))

是否有等效的 casbah API 以编程方式启用分片并选择 shardKey 以及我们目前正在对我们的 mongo 集群进行分片以向外扩展。我们的数据库 + 集合名称提前未知,并且使用 API 动态创建,因此使用 mongo shell 启用分片根本不是一个选项。

有一个更好的方法吗 ?有什么建议吗?

4

2 回答 2

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))
于 2013-06-28T01:59:28.103 回答
0

为了完整性和帮助他人 -enableSharding是一个命令(请参阅enableSharding 文档),您可以使用db.command.

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 肯定可以务实地做。

于 2013-06-12T13:31:09.143 回答