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

问题描述 投票:0回答:2

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

我发现了几个(12)答案提供了一种使用sql来做这件事的方法,我想知道Activerecord中是否内置了一些东西,比如

MyRecord.first.bytesize

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

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


更新

我还发现了ObjectSpace.memsize_of

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
    2678
  • ObjectSpace.memsize_of(record)
    128
ruby-on-rails ruby activerecord rails-activerecord
2个回答
2
投票

可以使用以下方法找到尺寸的近似值:

Marshal::dump(obj).size

正如您所说,它用于数据库大小调整 - 转储具有类名称和实例变量 - 与绝对记录大小相比,它可能会有点开销。

您可能想查看此答案以获取 MySQL 数据库大小 - 数据库大小计算?如何获取 MySQL 数据库的真实大小?

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


0
投票

您可以使用这个很酷的应用程序 https://calculatedata.org/ 来计算 SQL 和 NoSQL 数据库的任何模式的数据库存储需求,它非常接近准确,并且对日常需求很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.