¿Hay algún tipo de ventaja (rendimiento, índices, tamaño, etc) para el almacenamiento de fechas en MongoDB como un ISODate() vs almacenar como un timestamp de UNIX?

2 Comentarios

  1. 22

    La cantidad de sobrecarga de un ISODate en comparación con un time_t es trivial en comparación con las ventajas de la primera.

    Un formato ISO 8601 fecha es legible para humanos, que pueden ser utilizadas para expresar las fechas anteriores al 1 de enero de 1970, y lo que es más importante, no es presa de la Y2038 problema.

    Este último poco se puede no se puede enfatizar lo suficiente. En 1960, parecía absurdo que perder un octeto o dos en un siglo el número podría producir algún tipo de beneficio como el cambio de siglo fue increíblemente lejos. Sabemos cómo mal que resultó ser. El año 2038 estará aquí antes de lo que piensas, y time_t son ya insuficientes para representar – por ejemplo – la programación de los pagos de un contrato de 30 años.

    • Personalmente, cuando estoy trabajando en un software que las necesidades de las fechas anteriores al 1 de enero de 1970, yo uso un negitive número. En segundo lugar creo que la idea de usar un int para el tiempo fue genial cuando comenzaron la marca de tiempo unix y para los tipos de equipos que había entonces. Creo que para nosotros hoy en día podemos fácil manejar este problema con dos soultions. Primero podemos utilizar un Largo insteed de un Int.
    • ¿Qué es time_t? Es este un tipo de datos en mongodb?
    • se trata de una norma de tipo C para la representación de toda segundos. Se define como 32 o de 64 bits con signo entero.
    • El time_t acusación, mientras que sin duda era válido hace un par de años, no se sostiene más. En mi 64 bits de Debian sistema time_t se define como un alias de long int (__SQUAD_TYPE) en /usr/include/x86_64-linux-gnu/bits/{types.h,typesizes.h}. Ahora que incluso los smartphones van de 64 bits, hay un montón de tiempo que queda antes de 2038 a convertir todos los sistemas para interpretar time_t como un entero de 64 bits. Sin duda, el legado de sistemas pueden experimentar dificultades, pero, ¿cuántos equipos físicamente sobrevivir durante tres décadas, mientras que en uso activo?
    • Al parecer HIJO (y por lo tanto Mongo) permite sólo de 32 bits para time_t: docs.mongodb.org/manual/reference/bson-types
    • Hola @rsu , lo que sobre el rendimiento de las consultas ISODate contra time_t (índice) ?

  2. 18

    MongoDB integrado del tipo de Fecha es muy similar a la de un timestamp de unix almacenados en time_t. La única diferencia es que las Fechas son de 64 bits campo de almacenamiento de milisegundos desde el 1 de enero de 1970, en lugar de una de 32 bits de los campos de almacenamiento de segundos desde la misma época. El único inconveniente es que para las versiones actuales se trata de la cuenta como sin signo, de modo que no puede manejar fechas antes de 1970 correctamente. Esto será corregido en MongoDB 2.0 prevista para el lanzamiento en alrededor de un mes.

    Un posible punto de confusión es el nombre «ISODate». Es sólo una función auxiliar en el shell para envolver alrededor de javascript horrible constructor de Fecha. Si usted llamar «ISODate()» o «new Date()» recibirá de vuelta el mismo objeto Date, sólo hemos cambiado la forma en que se imprime. Usted todavía está libre para el uso normal de la ISO Fecha de picaduras o time_t enteros sin el uso de nuestros constructores, pero no conseguirá agradable Fecha de objetos en su idioma de preferencia.

Dejar respuesta

Please enter your comment!
Please enter your name here