Fecha vs milisegundos | para scalablility, el ahorro, la búsqueda y la obtención de vez en Java + MySQL (u otro Db de)

StackOverflow https://stackoverflow.com/questions/1472711

Pregunta

¿Cuál es el más beneficioso en Java y una base de datos de DateTime? (El uso de JodaTime como fecha)

(objeto DateTime (Java) + marca de tiempo (DB)) VS (milisegundos de largo (Java) + BIGINT (DB)

para el uso de la información DateTime en aplicación Java Web respaldado por una base de datos subyacente

Las áreas de interés

  • manipulación, procesamiento y uso de memoria en Java
  • ahorro de espacio de almacenamiento utilizando eficientes en una base de datos MySQL
  • facilidad de portar una columna BIGINT / TIMESTAMP a otro DBs
  • facilidad de búsqueda en la base de datos para un BIGINT / marca de tiempo o entre dos BIGINTs / TIMESTAMP

por ejemplo. Decir que he tenido un evento con un DateTime inicio y fin. ¿Es más rápido para buscar eventos en fechas utilizando BIGINT en el PP de TIMESTAMPS

Yo podría estar intercambiando el DB subyacente a medida que surjan problemas de escalabilidad y recuperación.

¿Quieres guardar la fecha y hora como una fecha en una base de datos MySQL problemas de plomo al portar a otra base de datos como Oracle?


Actualmente utilizo la Joda DateTime en Java y luego almacenar la milésima de segundo de ese valor.

Al recuperar, lo convertir los milisegundos de nuevo a un objeto DateTime y mostrarlo.

¿Fue útil?

Solución

En realidad, hay dos preguntas aquí. En primer lugar, lo que la abstracción se debe utilizar en Java para representar el tiempo? Joda El tiempo es definitivamente mejor que java.util.Date. Si usted se está preguntando si desea utilizar simplemente un largo - Me imagino que no puede salirse con que si lo que necesita hacer ningún tipo de manipulación fecha o comparación. Así, Joda Time.

Y entonces es definitivamente la mejor manera de utilizar esta marca de tiempo en MySQL, ya que será casi idéntico sabia de almacenamiento de MySQL y tratará el valor apropiadamente, como una fecha, cuando se desea utilizar las funciones de fecha en la columna. controladores JDBC también entenderán que debería ser asignada a un tipo de fecha.

No me puedo imaginar que tendrá problemas para portar un tipo de fecha, representada correctamente como una fecha en el esquema, a otra base de datos, en caso de necesitar. Me puedo imaginar los problemas si usted trata el tipo de fecha como un bigint, que es menos correcta.

Por lo tanto, sólo tiene que elegir los tipos más correcto en este caso. Dudo que haya cualquier ganancia de rendimiento disponible en la elección de un tipo menos adecuada de todos modos.

Otros consejos

Siempre estoy usando el enfoque “milisegundos desde el año 1970”. De esta manera no tengo que preocuparse de qué zona horaria de la fecha pertenece porque la fecha en la base de datos siempre es GMT.

Por supuesto, depende de lo que quiere hacer con los datos, pero yo recomendaría el uso de tipo nativo del DB para la hora / fecha (sea lo que sea) para su almacenamiento en la base de datos. Ese es el estándar para bases de datos, y la mayoría de las funciones de fecha / hora en DBs esperan que los datos en esa forma.

Nota especial sobre MySQL:

Si bien se puede utilizar marca de tiempo para los valores de fecha / hora, tenga en cuenta que no puede grabar TIMESTAMP fechas anteriores a 1970-01-01. Así, mientras que es aceptable para fechas cercanas al "ahora" (como las fechas de creación / modificación), no se appropriat para fechas posiblemente históricos, como la fecha de nacimiento. Por lo que sólo utilice TIMESTAMP si está completamente seguro de que nunca se necesita fechas históricas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top