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(scala 2.10を使用)のcasbahドライバーのバージョンは何ですか

私たちのユースケースは、コレクション + インデックスが casbah scala API を使用してプログラムで作成されdbConnection.getCollection(....)collection.ensureIndex(DBObject("orgId" -> 1), DBObject("background" -> true, "name" -> "org_idx", "unique" -> false))

プログラムでShardingを有効にしてshardKeyを選択する同等のcasbah APIはありますか?現在、mongoクラスターをシャーディングしてスケールアウトしています。私たちのデータベースとコレクションの名前は事前に知られておらず、API を使用して動的に作成されるため、mongo シェルを使用してシャーディングを有効にすることは単にオプションではありません。

これを行うより良い方法はありますか?推奨事項はありますか?

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 docsを参照) であり、 を使用して casbah から任意のコマンドを実行できます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>))

この部分は、シャードキーを定義する MongoDBObject である必要があります。

Asya が言及しているように、これはユースケースに適したソリューションではないかもしれませんが、casbah を使用して実用的に行うことは確かに可能です。

于 2013-06-12T13:31:09.143 に答える