Заставить ActiveRecord / Rails использовать фактические столбцы mysql TIMESTAMP

Rails ': timestamp тип столбца ложный; на самом деле это просто псевдоним для : datetime .

Я использую mysql и хочу использовать фактические столбцы unix-timestamp TIMESTAMP .

a) Есть ли хороший способ установить это, кроме простого создания столбца с помощью SQL?

b) Справится ли ActiveRecord с этим должным образом (например, преобразование в Time при необходимости, принятие временная метка unix Целое число в качестве входных данных и т. д.)? С какими проблемами мне придется столкнуться и где?

Почему:

  1. Скорость. Это для чрезвычайно активной таблицы, которая объединяет внешние источники данных, которые уже используют временные метки unix. Преобразование в datetime (или даже преобразование сначала в строку db, которая проходит через 2 gsub s) использует большую часть времени импорта. В противном случае я мог бы сделать просто дешевый вызов Integer # to_s .

  2. Часовые пояса. Я не хочу их. Я хочу, чтобы он сохранялся без привязки к часовому поясу; Работа с часовыми поясами - это боль и совершенно не имеет отношения к моим потребностям, за исключением самого последнего этапа перед индивидуальным отображением пользователя. Самым данным не нужно знать, в каком часовом поясе они были записаны.

  3. Размер. Это большой стол. TIMESTAMP вдвое меньше DATETIME.

Да, я бы все равно выполнял вычисления updated_at в коде, а не в mysql. Эта часть не является узким местом.

Почему ваше «почему бы и нет» неверно (предварительно, чтобы показать, что я не прошу по нубическим причинам :-P):

  1. «Но автоматические обновления TIMESTAMP»: Это верно только по умолчанию и может легко выключаться.
  2. На самом деле я не использую Rails, только ActiveRecord.
  3. Да, это основано на фактических данных профилирования ; Оптимизирую не рано. ActiveRecord :: ConnectionAdapters :: AbstractMysqlAdapter # quote Цитата # quoted_date [при прохождении Time ]] или Mysql2Adapter # quote_string [при предварительном преобразовании to_s (: db) ]) на самом деле является самым ресурсоемким разделом моего парсера. Я хочу избавиться от этого.

11
задан Sai 10 February 2012 в 13:14
поделиться