Activerecord的记录大小(以字节为单位)

时间:2015-12-14 12:54:27

标签: ruby-on-rails ruby activerecord rails-activerecord

是否有一种简单的方法可以使用activerecord获取记录大小(就磁盘空间而言)(我的db是mysql)?

我发现有几个(12)答案提供了一种使用sql的方法,我想知道Activerecord中是否有内置的东西,比如MyRecord.first.bytesize

表的大小也可以,我需要一个平均行大小。

这样做的目的是估算数据库的磁盘空间要求。

更新

我还找到了ObjectSpace.memsize_of

require 'objspace'
ObjectSpace.memsize_of(MyRecord.first)

activerecord对象的大小是否等于数据库中记录的大小?

这似乎给出了所有字段的组合大小。我正在将所有不响应size的字段转换为字符串,例如时间戳。

record.attributes.keys.map{ |attr_name| record.send(attr_name)}.inject{|sum, attr| sum + (attr.respond_to?(:size) ? attr.size : attr.to_s.size)  }

以下是对同一记录的这些方法的结果的比较:

  • 所有属性的总大小(见上文): 222
  • Marshal::dum(record).size 2678
  • ObjectSpace.memsize_of(record) 128

1 个答案:

答案 0 :(得分:2)

使用以下方法可以找到大小的近似值:

Marshal::dump(obj).size

因为你说过,它用于数据库大小调整 - 转储具有类和实例变量的名称 - 与绝对记录大小相比,它可能有点开销。

您可能希望查看此答案以获取MySQL数据库大小 - Database size calculation?How to Get True Size of MySQL Database?

根据当前存储在数据库中的实体数量,以及使用上述方法确定的大小 - 您可以推断尺寸。