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