Особенности mongoDB — грабли на которые я наступил

Решил на проекте использовать mongoDB 3.0. Плюсов много — работает быстро, доступный синтаксис команд, много чего имеет в движке, например, работать с геоданными, шардинг и все такое. Но я натолкнулся и на подводные камни — размер BSONDocument коллекции возвращаемых различными операциями, кроме find(), составляет не более 16Мегабайт — пруф: maximum BSON document size (англ).

Таким образом, мы не можем получить сразу результат объемной агрегации — размер не позволяет — результат нужно через out сохранять в отдельной коллекции.

А методы, не имеющие возможность сохранять коллекцию через out — например distinct() — просто вызывают ошибку. Поэтому disctinct() мне пришлось реализовать через MapReduce. То есть, в попытке реализовать SELECT * IN ()  пришлось городить довольно сложный велосипед, чтобы обойти ограничения на размер данных в 16Мб ).

Если используются типизированные коллекции, в супер больших объемах данных, позаботитесь о BIGINT заранее, иначе mongoDB позаботится об этом сама, и вызовет исключение.

Такие дела.

Добавить комментарий

Ваш адрес email не будет опубликован.

Яндекс.Метрика