【发布时间】:2012-03-02 22:08:26
【问题描述】:
Rails 的:timestamp 列类型所在;它实际上只是:datetime 的别名。
我正在使用 mysql,我想使用实际的 unix-timestamp TIMESTAMP 列。
a) 除了使用 SQL 来创建列之外,还有什么好的设置方法吗?
b) ActiveRecord 会正确处理它吗(例如,必要时转换为Time,接受unix 时间戳Integer 作为输入等)?我应该在哪里处理哪些问题?
为什么:
速度。这是一个非常活跃的表,它聚合了已经使用 unix 时间戳的外部数据源。转换为日期时间(或者甚至首先转换为一个数据库字符串,它经过 2
gsubs)占用了大部分导入时间。否则我可能只会打一个非常便宜的Integer#to_s电话。时区。我不想要他们。我希望它与时区无关地存储;处理时区是一件痛苦的事情,并且与我的需求完全无关,除非是在个人用户显示之前的最后阶段。数据本身不需要知道它记录在哪个时区。
尺寸。这是一张大桌子。 TIMESTAMP is half the size of DATETIME.
是的,我仍然会在代码中进行updated_at 计算,而不是 mysql。那部分不是瓶颈。
为什么你的“为什么不”是错误的(先发制人地表明我不是在问愚蠢的原因:-P):
- “但 TIMESTAMP 自动更新”:That's only true by default, and can be easily switched off.
- 我实际上没有使用 Rails,只是使用 ActiveRecord。
- 是的,这是基于actual profiling data;我不是早期优化。
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#quote(在Quoting#quoted_date[如果通过Time] 或Mysql2Adapter#quote_string[如果预转换to_s(:db)])实际上是我的爬虫中最消耗CPU 的部分。我想摆脱它。
【问题讨论】:
-
如果您使用的是 Rails (#2),这有什么关系? (我正在使用 Rails,但考虑使用时间戳来节省空间。)
标签: mysql ruby-on-rails activerecord timestamp