2015-07-29 3 views
1

Я новичок в MongoDB Sharding. Я создал mongos и config server и один осколок на xyz.com и второй осколок на xyzshard.com сервере:Sharding with MongoDB

  • mongos на xyz.com:27019

  • config server на xyz.com:27018

  • 1 осколок на xyz.com:27017

  • 2-й осколок на xyzshard.com:27017

Моя база данных test и коллекция test_collection. Я включил sharding на test.test_collection.

Я индексировали _id поле с помощью "hash"

db.test_collection.ensureIndex({ _id : "hashed" }) 

я запускаю следующую команду:

for (var i = 1; i <= 500; i++) 
    db.test_collection.insert({ x : i }) 

Я получаю ниже вывод:

WriteResult({ "nInserted" : 1 }) 

Но когда я запускаю найти запрос на обоих черепах:

db.test_collection.find() 

Я получаю все документы на каждом осколке.

Правильно ли это, или я ошибаюсь нигде?

Выход для sh.status() на xyz.com является

sharding version: { 
    "_id" : 1, 
    "minCompatibleVersion" : 5, 
    "currentVersion" : 6, 
    "clusterId" : ObjectId("55b8d3e9a8742d49164820b6") 
} 
    shards: 
    { "_id" : "shard0000", "host" : "localhost:27017" } 
    balancer: 
    Currently enabled: yes 
    Currently running: no 
    Failed balancer rounds in last 5 attempts: 0 
    Migration Results for the last 24 hours: 
     No recent migrations 
    databases: 
    { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
    { "_id" : "test", "partitioned" : true, "primary" : "shard0000" } 
     test.test_collection 
      shard key: { "_id" : "hashed" } 
      chunks: 
       shard0000 2 
      { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong(0) } on : shard0000 Timestamp(1, 1) 
      { "_id" : NumberLong(0) } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 2) 
    { "_id" : "test_db", "partitioned" : false, "primary" : "shard0000" } 
    { "_id" : "db", "partitioned" : false, "primary" : "shard0000" } 

Выход для sh.status() на xyzshard.com

sharding version: { 
    "_id" : 1, 
    "minCompatibleVersion" : 5, 
    "currentVersion" : 6, 
    "clusterId" : ObjectId("55b8d3e9a8742d49164820b6") 
} 
    shards: 
    { "_id" : "shard0000", "host" : "localhost:27017" } 
    databases: 
    { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
    { "_id" : "test", "partitioned" : true, "primary" : "shard0000" } 
     test.test_collection 
      shard key: { "_id" : "hashed" } 
      chunks: 
       shard0000 2 
      { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong(0) } on : shard0000 Timestamp(1, 1) 
      { "_id" : NumberLong(0) } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 2) 
    { "_id" : "test_db", "partitioned" : false, "primary" : "shard0000" } 
    { "_id" : "db", "partitioned" : false, "primary" : "shard0000" } 
+0

Вы имеете в виду, что вы получаете 500 документов в результате запроса 'find' на ** оба ** осколки? Или в целом, например, 200 на 'xyz.com', 300 на' xyzshard.com'? – bagrat

+0

да ... я получаю 500 документов по обоим осколкам каждый – 3ppps

+0

Можете ли вы попробовать sh.status: http://docs.mongodb.org/manual/reference/method/sh.status/ –

ответ

2

Вы должны подключить к вашему mongos и вставить данные на него. Вы можете вставить 50000 записей для целей тестирования. И после этого запустите sh.status().

Вы, наконец, увидите распределение. Помните, что ваш сервер конфигурации должен быть запущен, и все серверы осколков подключены к серверу mongos.