是否有一种简单的方法可以使用activerecord获取记录大小(就磁盘空间而言)(我的db是mysql)?
我发现有几个(1,2)答案提供了一种使用sql的方法,我想知道Activerecord中是否有内置的东西,比如MyRecord.first.bytesize
。
表的大小也可以,我需要一个平均行大小。
这样做的目的是估算数据库的磁盘空间要求。
更新
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) }
以下是对同一记录的这些方法的结果的比较:
Marshal::dum(record).size
: 2678 ObjectSpace.memsize_of(record)
: 128 答案 0 :(得分:2)
使用以下方法可以找到大小的近似值:
Marshal::dump(obj).size
因为你说过,它用于数据库大小调整 - 转储具有类和实例变量的名称 - 与绝对记录大小相比,它可能有点开销。
您可能希望查看此答案以获取MySQL数据库大小 - Database size calculation?和How to Get True Size of MySQL Database?
根据当前存储在数据库中的实体数量,以及使用上述方法确定的大小 - 您可以推断尺寸。