Я хотел перенести наши серверы сегодня, но не смог, поскольку на новом (более крупном) сервере MongoDB очень медленно работал с определенной коллекцией. Прежде всего, вот характеристики.
Старый сервер:
Digital Ocean 80$ Instance
RAM: 4GB
vCPUs: 4 (I can't find the GHZ)
Новый сервер:
Switch Engines c1.large Instance
RAM: 8GB
vCPUs: 8 (again, I can't find the GHZ)
На обоих серверах достаточно места на SSD.
На новом сервере я получаю:
пока я извлекаю документы из этой конкретной коллекции. Впоследствии mongodb сохраняет 43% памяти занятой. На старом сервере mongo постоянно использует около 8% памяти, и при запросе документов из проблемной коллекции нет скачков ЦП.
Что я делаю для извлечения вещей из коллекции:
Iterator<CompilerCacheEntry> found = ds()
.find(CompilerCacheEntry.class).filter("hash", hash)
while (found.hasNext()) {...
где ds
из org.mongodb.morphia.Datastore;
а фильтр реализован так:
public Query<T> filter(String condition, Object value) {
String[] parts = condition.trim().split(" ");
if(parts.length >= 1 && parts.length <= 6) {
String prop = parts[0].trim();
FilterOperator op = parts.length == 2?this.translate(parts[1]):FilterOperator.EQUAL;
this.add(new Criteria[]{new FieldCriteria(this, prop, op, value, this.validateName, this.validateType)});
return this;
} else {
throw new IllegalArgumentException("\'" + condition + "\' is not a legal filter condition");
}
}
Что еще любопытно, так это то, что mongodb до миграции составлял 30 ГБ, а теперь - 3 ГБ, но я читал, что это только потому, что mongo очищается при миграции.
Итак, у меня осталось общее замешательство и несколько вопросов:
Вот части статистики коллекции для справки:
>db.compilercache.stats()
{
"ns" : "taskbase.compilercache",
"count" : 21191,
"size" : 4592895563,
"avgObjSize" : 216738,
"storageSize" : 1814052864,
"capped" : false,
Если вам нужна дополнительная информация, дайте мне знать. Заранее большое спасибо!