有没有一种简单的方法可以使用activerecord(我的数据库是mysql)获取记录的大小(就其占用的磁盘空间而言)?
我发现几个( 1 、 2 )答案提供了一种使用 sql 执行此操作的方法,我想知道 Activerecord 中是否内置了某些内容,例如 MyRecord.first.bytesize
.
表格的大小也可以,我需要平均行大小。
这样做的目的是估计数据库的磁盘空间需求。
更新
require 'objspace'
ObjectSpace.memsize_of(MyRecord.first)
activerecord对象的大小是否等于数据库中记录的大小?
这似乎给出了所有字段的总大小。我将所有不响应 size
的字段转换为 String,例如时间戳。
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
:2678ObjectSpace.memsize_of(record)
:128
最佳答案
可以通过以下方式找到尺寸的近似值:
Marshal::dump(obj).size
正如您所说,它用于数据库大小调整 - 转储具有类名称和实例变量 - 与绝对记录大小相比,它可能会有点开销。
您可能想查看此答案以获取 MySQL DB 大小 - Database size calculation?和 How to Get True Size of MySQL Database?
基于当前存储在数据库中的实体数量以及使用上述方法确定的大小 - 您可以推断大小。
关于ruby-on-rails - Activerecord 的记录大小(以字节为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34267603/