gpt4 book ai didi

mysql - 使 ActiveRecord/Rails 使用实际的 mysql TIMESTAMP 列

转载 作者:IT王子 更新时间:2023-10-28 23:44:13 24 4
gpt4 key购买 nike

Rails 的:timestamp 列类型所在;它实际上只是 :datetime 的别名。

我正在使用 mysql,我想使用实际的 unix-timestamp TIMESTAMP 列。

a) 除了使用 SQL 创建列之外,是否有设置此设置的好方法?

b) ActiveRecord 是否会正确处理它(例如,必要时转换为 Time,接受 unix 时间戳 Integer 作为输入等)?我应该处理哪些陷阱,在哪里处理?

为什么:

  1. 速度。这是针对一个非常活跃的表,该表聚合了已经使用 unix 时间戳的外部数据源。转换为日期时间(或者甚至首先转换为 db 字符串,经过 2 个 gsub)耗尽了大部分导入时间。否则我可能只是在做一个非常便宜的 Integer#to_s 调用。

  2. 时区。我不要他们。我希望它与时区无关地存储;处理时区是一种痛苦,并且与我的需求完全无关,除了在个人用户显示之前的最后阶段。数据本身不需要知道它记录在哪个时区。

  3. 大小。这是一张大 table 。 TIMESTAMP is half the size of DATETIME.

是的,我仍然会在代码中进行 updated_at 计算,而不是 mysql。那部分不是瓶颈。

为什么您的“为什么不”是错误的(先发制人,以表明我不是出于愚蠢的原因要求 :-P):

  1. “但是 TIMESTAMP 自动更新”:That's only true by default, and can be easily switched off.
  2. 我实际上没有使用 Rails,只使用了 ActiveRecord。
  3. 是的,这是基于 actual profiling data ;我没有提前优化。 ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#quote(在 Quoting#quoted_date [如果传递 Time] 或 Mysql2Adapter#quote_string [if preconverting to_s(:db)]) 实际上是我的爬虫中最消耗 CPU 的部分。我想摆脱它。

最佳答案

这是可行的(只是在类型定义中添加了空白字符,所以 :timestamp 不会覆盖它):

     t.add_column :sometable, :created_at, 'timestamp '

关于mysql - 使 ActiveRecord/Rails 使用实际的 mysql TIMESTAMP 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com