ISODate () MongoDB против отметки времени UNIX - PullRequest
22 голосов
/ 13 июня 2011

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

Ответы [ 2 ]

22 голосов
/ 13 июня 2011

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

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

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

18 голосов
/ 13 июня 2011

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

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

...