【问题标题】:Can I check the size of a record with Rails?我可以用 Rails 检查记录的大小吗?
【发布时间】:2015-09-20 03:14:16
【问题描述】:

是否有 Rails 方法可以返回记录的数据大小(以字节为单位)?

假设我有一个名为 Item 的表。是否有类似@item.data_size 的方法会返回“xx 字节”?

我有一个mysql数据库。

【问题讨论】:

  • 你的意思是表中没有记录吗?
  • @rakeshpatra 对不起,我的意思是信息大小,以数据字节为单位。

标签: mysql sql ruby-on-rails ruby


【解决方案1】:

不确定是否有像 C 一样的原生方式,但试试这个(它可能包括类的大小,这与单个 SQL 行不同):

require 'objspace'
ObjectSpace.memsize_of(@my_item)

【讨论】:

    【解决方案2】:

    第一种方式

    require "rubygems"
    require "knjrbfw"
    
    analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
    
    puts "Size: #{analyzer.calculate_size}"
    

    第二种方式

    require 'objspace'
    
    h = {"a"=>1, "b"=>2}
    p ObjectSpace.memsize_of(h)       
    

    Measure the memory taken by a Ruby object (by Robert Klemme)

    【讨论】:

      【解决方案3】:

      幸运的是,没有。据我所知,无法确定 MySql 以及大多数数据库中的记录大小。这是由于以下原因,我只列出最明显的原因:

      • 记录可能包含关联,即链接到另一个表中的另一个记录,完全不清楚如何计算这一点,更不清楚如何解释这种计算的结果。
      • 记录有一些这样的索引开销,计算是否应该包括它?

      因此,这意味着这样的记录大小本质上将是非常近似和平均的。如果存在这种方法,可能会引起很多混乱。但是,这并不意味着这根本不能完成。 Referring 这个 SO 答案可以获得表格大小。您可以尝试seed您的数据库,其中包含数百万条典型的虚假数据记录,例如使用ffaker gem,获取大小并除以记录数。这应该为您的特定情况提供非常好的数字。

      下一步,您可能会检查平均记录大小是否与内存中的对象大小相关。这可能很有趣。

      干杯!

      【讨论】:

        【解决方案4】:

        是的,您可以计算访问模型的记录总数。作为示例,您可以尝试此代码示例

        @items = Item.all
        

        @items.size@items.count@items.length 将返回持有此 @items 变量的记录总数。或者直接在model 上使用count 就像Item.count 将记录总数返回到数据库中。

        【讨论】:

        • 对不起,我应该更清楚。数据大小是指一条记录占用了多少字节信息。
        猜你喜欢
        • 1970-01-01
        • 2012-08-28
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 2014-03-09
        • 2021-12-19
        相关资源
        最近更新 更多