MongoDB ограничивает количество параллелизма - PullRequest
1 голос
/ 14 декабря 2011

Я создаю приложение, в котором одновременно работают несколько серверов и несколько процессов на каждом сервере, и все они обрабатывают данные, делают запросы / обновления и вставки.Таким образом, в общей сложности выполняется более 35 одновременных подключений.Все эти серверы обрабатывают данные, отправляемые на один сервер mongodb (mongod).Я не осматриваю свою базу данных в данный момент.Проблема в том, что меня ограничивает мой сервер mongodb.Всякий раз, когда я добавляю больше серверов, запросы / обновления / вставки работают медленнее (они занимают больше времени).Я работал на этом mongohq.com, затем я недавно создал свой собственный сервер amazon для mongod, но я все еще получаю почти тот же результат.Список ниже - мой db.serverStatus ({}).Я немного новичок в mongodb, но в основном мне нужно знать, как ускорить процесс для количества одновременных операций, выполняемых с моим сервером mongo.Мне нужно, чтобы иметь возможность обрабатывать много запросов.Я знаю, что это возможно, но если это вообще возможно, можете ли вы перечислить некоторые другие доступные решения.Спасибо.

> db.serverStatus({})
{
"host" : "ip-10-108-245-21:28282",
"version" : "2.0.1",
"process" : "mongod",
"uptime" : 11380,
"uptimeEstimate" : 11403,
"localTime" : ISODate("2011-12-13T22:27:56.865Z"),
"globalLock" : {
    "totalTime" : 11380429167,
    "lockTime" : 86138670,
    "ratio" : 0.007569017717695356,
    "currentQueue" : {
        "total" : 0,
        "readers" : 0,
        "writers" : 0
    },
    "activeClients" : {
        "total" : 35,
        "readers" : 35,
        "writers" : 0
    }
},
"mem" : {
    "bits" : 64,
    "resident" : 731,
    "virtual" : 6326,
    "supported" : true,
    "mapped" : 976,
    "mappedWithJournal" : 1952
},
"connections" : {
    "current" : 105,
    "available" : 714
},
"extra_info" : {
    "note" : "fields vary by platform",
    "heap_usage_bytes" : 398656,
    "page_faults" : 1
},
"indexCounters" : {
    "btree" : {
        "accesses" : 798,
        "hits" : 798,
        "misses" : 0,
        "resets" : 0,
        "missRatio" : 0
    }
},
"backgroundFlushing" : {
    "flushes" : 189,
    "total_ms" : 29775,
    "average_ms" : 157.53968253968253,
    "last_ms" : 185,
    "last_finished" : ISODate("2011-12-13T22:27:16.651Z")
},
"cursors" : {
    "totalOpen" : 34,
    "clientCursors_size" : 34,
    "timedOut" : 0,
    "totalNoTimeout" : 34
},
"network" : {
    "bytesIn" : 89743967,
    "bytesOut" : 59379407,
    "numRequests" : 840133
},
"opcounters" : {
    "insert" : 5437,
    "query" : 8957,
    "update" : 4312,
    "delete" : 0,
    "getmore" : 76,
    "command" : 821388
},
"asserts" : {
    "regular" : 0,
    "warning" : 0,
    "msg" : 0,
    "user" : 0,
    "rollovers" : 0
},
"writeBacksQueued" : false,
"dur" : {
    "commits" : 29,
    "journaledMB" : 0.147456,
    "writeToDataFilesMB" : 0.230233,
    "compression" : 0.9999932183619632,
    "commitsInWriteLock" : 0,
    "earlyCommits" : 0,
    "timeMs" : {
        "dt" : 3031,
        "prepLogBuffer" : 0,
        "writeToJournal" : 29,
        "writeToDataFiles" : 2,
        "remapPrivateView" : 0
    }
},
"ok" : 1

}

1 Ответ

1 голос
/ 14 декабря 2011

Что удивительного в том, что большая нагрузка генерирует более высокое время отклика от mongod? Есть несколько возможных причин снижения производительности.

Например, каждая запись в mongod использует блокировку записи во всем процессе. Таким образом, чем больше серверов вы добавляете, тем больше будет попыток обновления (при условии, что загрузка обновлений стабильна для каждого сервера) и, следовательно, тем дольше процесс будет находиться в режиме блокировки записи. Вы можете следить за этим через поле "%%" на mongostat.

Кроме того, если вы используете функциональность на основе JS (m / r, db.eval () и т. Д.), Эти операции не могут выполняться одновременно mongod из-за того, что каждый mongod имеет один контекст JavaScript (который является однопоточным) .

Если вам нужен более конкретный анализ, вы можете рассмотреть возможность размещения точных цифр. Сколько операций чтения и записи в секунду, какие планы запросов для выполняемых вами запросов, как влияет добавление дополнительного сервера приложений на общую производительность базы данных и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...