我可以用Rails查看记录的大小吗?

时间:2015-09-20 03:14:17

标签: mysql sql ruby-on-rails ruby

是否有Rails方法返回记录的数据大小?

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

我有一个mysql数据库。

4 个答案:

答案 0 :(得分:1)

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

import javax.script.*;

public class StaticVars {
    public static String myname = "John\n";
    public static void main(String[] args) {
        try{
            ScriptEngine engine;
            ScriptEngineManager manager = new ScriptEngineManager();
            engine=System.getProperty("java.version").startsWith("1.8")?            
                manager.getEngineByName("Nashorn") :    //j1.8_u51
                manager.getEngineByName("JavaScript");  //j1.7

            engine.put("staticvars", new StaticVars());
            engine.eval("print(staticvars.myname);");
            //print "John" if ran with java 7
            //print "undefined" if ran with java 8

        } catch(Exception e){e.printStackTrace();}
    }
}

答案 1 :(得分:0)

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

@items = Item.all

@items.size@items.count@items.length将返回此@items变量的记录总数。或直接您可以count使用model Item.count,如def InitArray(x): x = np.arange(0, 5) 将记录的总数返回数据库。

答案 2 :(得分:0)

第一种方式

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 :(得分:0)

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

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

所以,这意味着这样的记录大小本质上是非常近似和平均的。如果存在这种方法,可能会出现很多混乱。然而,这并不意味着根本无法做到这一点。 Referring这个答案可以获得表格大小。您可以尝试使用数百万个典型的假数据记录seed数据库,例如使用ffaker gem,获取大小并除以记录号。这应该为您的特定情况提供非常好的数字。

作为下一步,您可以检查相关的平均记录大小,并将其与内存中的对象大小相关联。这可能非常有趣。

干杯!