有没有一种简单的方法可以使用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) }
以下是这些方法对同一记录的结果比较:
Marshal::dum(record).size
:2678ObjectSpace.memsize_of(record)
:128可以使用以下方法找到尺寸的近似值:
Marshal::dump(obj).size
正如您所说,它用于数据库大小调整 - 转储具有类名称和实例变量 - 与绝对记录大小相比,它可能会有点开销。
您可能想查看此答案以获取 MySQL 数据库大小 - 数据库大小计算? 和 如何获取 MySQL 数据库的真实大小?
基于当前存储在数据库中的实体数量以及使用上述方法确定的大小 - 您可以推断大小。
您可以使用这个很酷的应用程序 https://calculatedata.org/ 来计算 SQL 和 NoSQL 数据库的任何模式的数据库存储需求,它非常接近准确,并且对日常需求很有帮助。