Rails ':timestamp
tipo de columna mentiras; en realidad es solo un alias para :datetime
.Hacer ActiveRecord/Rails utilizar columnas mysql TIMESTAMP reales
Estoy usando mysql, y quiero utilizar las columnas de fecha y hora de unix TIMESTAMP
.
a) ¿Hay una buena manera de configurar esto, además de solo hacer la columna con SQL?
b) ¿Actuará ActiveRecord correctamente (por ejemplo, convirtiendo a Time
cuando sea necesario, aceptando una marca de tiempo unix Integer
como entrada, etc.)? ¿Qué problemas debería esperar tener que manejar, y dónde?
qué:
velocidad. Esto es para una tabla extremadamente activa que agrega fuentes de datos externas que ya usan marcas de tiempo de Unix. Convirtiendo a datetime (o incluso convirtiendo primero a una cadena de db, que pasa por 2
gsub
s) consume la mayor parte de su tiempo de importación. De lo contrario, podría estar haciendo una llamada barataInteger#to_s
.Timezones. No los quiero. Quiero que se almacene la zona horaria de forma independiente; tratar con zonas horarias es un problema y es completamente irrelevante para mis necesidades, excepto en la etapa final antes de la visualización individual del usuario. Los datos en sí no necesitan saber en qué zona horaria se registró.
Tamaño. Es una mesa grande TIMESTAMP is half the size of DATETIME.
Sí, yo todavía estaría haciendo updated_at
cálculos en el código, no MySQL. Esa parte no es un cuello de botella.
Por qué su 'por qué no' está mal (de forma preventiva, para mostrar que no estoy preguntando por razones noobish :-P):
- "pero las actualizaciones TIMESTAMP Auto": That's only true by default, and can be easily switched off.
- estoy en realidad no usa Rails, solo ActiveRecord.
- Sí, esto se basa en actual profiling data; No estoy optimizando temprano.
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#quote
(enQuoting#quoted_date
[si pasaTime
] oMysql2Adapter#quote_string
[si preconvierteto_s(:db)
]) es en realidad la sección que consume más CPU de mi raspador. Quiero deshacerme de eso.
¿Por qué importaría si está utilizando rieles (# 2)? (Estoy usando Rails, pero considerando utilizar la marca de tiempo para ahorrar espacio) –