уроки - mongodb что это




Каков наилучший способ хранения дат в MongoDB? (2)

Я только начинаю узнавать о MongoDB и надеяться медленно перейти от MySQL.

В MySQL существуют два разных типа данных: DATE ('0000-00-00') и DATETIME ('0000-00-00 00:00:00') . В моей MySQL я использую тип DATE , но я не уверен, как перенести их в MongoDB. В MongoDB существует объект Date , который сопоставим с DATETIME . Кажется, было бы наиболее целесообразно использовать объекты Date , но это будет тратить пространство, так как часы, min, sec не используются. С другой стороны, хранение дат в виде строк кажется неправильным.

Есть ли золотой стандарт для хранения дат ('0000-00-00') в MongoDB?


BSON (формат данных хранения, используемый mongo изначально) имеет выделенный тип даты UTC datetime, который представляет собой 64-битное (так, 8 байт) целое число, обозначающее миллисекунды с момента времени Unix. Существует очень мало веских причин, по которым вы бы использовали любой другой тип для хранения дат и временных меток.

Если вы отчаянно пытаетесь сохранить несколько байт за дату (опять же, с добавлением магна и минимальным размером блока, и все это только стоит проблем в очень редких случаях), вы можете хранить даты в виде 3-байтового двоичного блока, сохраняя его как беззнаковое целое в формате YYYYMMDD или двухбайтный двоичный код, обозначающий «дни с 1 января года X», где X должен быть выбран соответствующим образом, поскольку это поддерживает только диапазон дат, охватывающий 179 лет.

EDIT: Как видно из приведенного ниже обсуждения, это очень жизнеспособный подход в очень редких случаях. В основном; использовать родной тип даты mongo;)


Если вы действительно заботитесь о сохранении 4 байта на поле (в случае, если у вас много полей DATE каждого документа), вы можете хранить даты как int32 поля в форме 20110720 (примечание MySQL DATE занимает 3 байта, поэтому в любом случае 20110720 хранилища будет больше). В противном случае мне лучше придерживаться стандартного типа даты и времени.





mongodb