Подтвердить что ты не робот

MongoDB ISODate() против отметки времени UNIX

Есть ли какое-либо преимущество (производительность, индексы, размер и т.д.) для хранения дат в MongoDB как ISODate() и хранения в качестве обычной отметки времени UNIX?

4b9b3361

Ответ 1

Количество служебных данных ISODate по сравнению с time_t тривиально по сравнению с преимуществами первого.

Дата формата ISO 8601 является читаемой человеком, ее можно использовать для выражения дат до 1 января 1970 года, и, самое главное, она не является жертвой Проблема Y2038.

Этот последний бит не может быть достаточно напряженным. В 1960 году казалось странным, что расточение октета или два на столетие может принести какую-либо пользу, поскольку поворот века был невероятно далек. Мы знаем, как неправильно, что оказалось. 2038 год будет здесь раньше, чем вы ожидаете, а time_t уже недостаточно для представления - например, графика платежей по 30-летнему контракту.

Ответ 2

Тип встроенной даты MongoDB очень похож на временную метку unix, хранящуюся в time_t. Единственное отличие состоит в том, что Даты представляют собой 64-битное поле, сохраняющее милисекунды с 1 января 1970 года, а не 32-битные поля, хранящие секунды с той же эпохи. Единственная нижняя сторона заключается в том, что для текущих выпусков он обрабатывает счет как unsigned, поэтому он не может правильно обрабатывать даты до 1970 года. Это будет исправлено в MongoDB 2.0, запланированном на выпуск примерно через месяц.

Возможной путаницей является имя "ISODate". Это просто вспомогательная функция в оболочке для обертывания javascript horrible Date constructor. Если вы вызываете либо "ISODate()", либо "new Date()", вы вернетесь к тому же самому объекту Date, мы просто изменили его печать. Вы по-прежнему можете использовать обычные устаревшие даты ISO или time_t ints без использования наших конструкторов, но вы не получите прекрасных объектов Date на выбранном вами языке.