Особенности mongodb импорта через mongoimport (DateTime)

Для импорта csv и json существует прекрасная утилита mongoimport. Она позволяет весьма быстро загружать файлы в mongodb (быстрее чем через bulk insert). При этом, mongoimport умеет использовать заголовки столбцов. Но, как всегда mongo подкинуло неприятный сюрприз. Все создаваемые поля имеют тип string. Т.е. импортировать int, ISODate она не умеет. Преобразовывать внутри БД, это очень долго (по сравнению с bulk insert). Получается, что mongoimport — шустрая но не очень полезная утилита.
P.S. В issue трекере разработчиков был таск по поводу добавления в mongoimport функционала. Пока не ясно, когда это будет имплементировано, что печалит.

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

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

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

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

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

Такие дела.

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