Смысл в следующем: есть достаточно мощное железо, 128gb, 2 x Xeon E5-2620, райд на 3 тб. На всем этом стоит голый линукс и mongodb 2.4.10, база большая, порядка 320гб, 100млн записей. Выполняется только запись и постоянно запускаются mapreduce процессы. Понятно что мр процессы не юзают всех 2 x 2 x 4 ядер.. Посему вопрос, как все это добро утилизировать чтобы проц не простаивал а занимался полезной деятельностью. Что то в голову кроме как, запустить 16 виртуалбоксов и сделать из них реплику, ничего не приходит.
Может быть есть более гуманные способы использовать все ядра ? Или все так делают.
PS: aggregation framework который умеет кушать ядра, совсем не подходит. Нужны MR задачи.
Ну начнем с того что вариант с репликами и виртуалками это откровенный бред и пустая трата ресурсов, ладно бы шардили, тогда можно было бы при правильном подходе распаралелить map-reduce (в теории). Да и виртуалки не нужны, можно же просто на разных портах несколько инстансов поднять.
А вообще тема довольно изъезженная. В частности CPU грузить банально нечем, все упирается в IO.
Про виртуалки я да, загнул. Шардинг, надо думать, но тут сильно влияет специфика бд. Это по сути статистика пользователей. Я предполагаю что шардить надо по ключу времени, но там будет дисбалланс шардов сильный, так как кол-во записей далеко не равномерно. Может быть вы подскажите как то нибудь способ чтобы в качестве sharding key выступала функция, а не просто поле?