ruby-on-rails - Activerecord 的记录大小(以字节为单位)

标签 ruby-on-rails ruby activerecord rails-activerecord

有没有一种简单的方法可以使用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

最佳答案

可以通过以下方式找到尺寸的近似值:

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/

相关文章:

ruby-on-rails - 如何在 ActiveRecord 中设置 has_one 默认值?

ruby-on-rails - 如何找到查询结果的大小

ruby-on-rails - Ruby on Rails : If you have 50 if-else statements in your after_create action, 会减慢您的应用程序吗?

ruby-on-rails - 如何在 Rails 控制台加载后执行代码?

ruby-on-rails - 在单个继承表和另一个表中的类之间建立多对多关联

ruby - 如何使用 has_many 更新连接模型 :through association?

ruby-on-rails - 片段缓存和用户头像/图像

ruby-on-rails - 从 Rails 3.2 到 Cake PHP 2.0。如何完成一些 Rails 常见任务?

windows - Ruby 可以用来开发简单的 Windows 应用程序吗?

ruby-on-rails - 如何根据当前语言环境渲染不同的部分