【发布时间】:2016-03-19 23:13:03
【问题描述】:
有没有一种简单的方法可以使用 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) }
以下是这些方法对同一记录的结果比较:
- 所有属性的组合大小(见上文):222
-
Marshal::dum(record).size:2678 -
ObjectSpace.memsize_of(record):128
【问题讨论】:
-
ActiveRecord 没有内置方法可以做到这一点。
-
我已经实现了一些可以满足我需求的快速解决方案,并将其打包到 gem 中。我以后可能会改进它...
标签: ruby-on-rails ruby activerecord rails-activerecord