是否有一种简单的方法可以使用activerecord (我的数据库是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
:2678ObjectSpace.memsize_of(record)
:128发布于 2015-12-14 05:08:32
通过使用以下方法可以找到大小的近似:
Marshal::dump(obj).size
既然您说过,它用于数据库大小--转储有类和实例变量的名称--与绝对记录大小相比,它可能是一些开销。
您可能想看看这个得到MySQL DB大小- 数据库大小计算?和如何获得MySQL数据库的真实大小?的答案。
根据当前存储在DB中的实体数量以及使用上述方法确定的大小,您可以推断大小大小。
https://stackoverflow.com/questions/34267603
复制