Rails ':timestamp
тип столбца лежит; на самом деле это просто псевдоним для :datetime
.
Я использую mysql и хочу использовать фактическую отметку времени Unix TIMESTAMP
столбцов.
a) Есть ли хороший способ установить это, кроме простого создания столбца с использованием SQL?
b) Будет ли ActiveRecord справляться с этим должным образом (например, преобразовывать в Time
при необходимости, принимать метку времени Unix Integer
в качестве ввода и т. Д.)? Какие ошибки я должен ожидать и где?
Почему:
Скорость. Это для чрезвычайно активной таблицы, которая агрегирует внешние источники данных, которые уже используют метки времени Unix. Преобразование в datetime (или даже преобразование сначала в строку базы данных, которая проходит через 2 gsub
s) использует большую часть времени импорта. В противном случае я мог бы просто сделать очень дешевый Integer#to_s
звонок.
Часовые пояса. Я не хочу их. Я хочу, чтобы он хранился в часовом поясе; Работа с часовыми поясами - это боль, и она совершенно не имеет отношения к моим потребностям, кроме как на самой последней стадии перед отображением отдельных пользователей. Самим данным не нужно знать, в каком часовом поясе они были записаны.
Размер. Это большой стол. TIMESTAMP вдвое меньше DATETIME.
Да, я все равно буду делать updated_at
вычисления в коде, а не в MySQL. Эта часть не является узким местом.
Почему ваше «почему бы и нет» неверно (предварительно, чтобы показать, что я не спрашиваю по нубистским причинам :-P):
- «Но автоматическое обновление TIMESTAMP»: Это верно только по умолчанию и может быть легко отключено.
- На самом деле я не использую Rails, просто ActiveRecord.
- Да, это основано на фактических данных профилирования ; Я не рано оптимизировать.
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#quote
(в Quoting#quoted_date
[при передаче Time
] или Mysql2Adapter#quote_string
[при предварительном преобразовании to_s(:db)
]) на самом деле является наиболее ресурсоемкой частью моего скребка. Я хочу избавиться от этого.