Eri*_*win 5 ruby memory activerecord ruby-on-rails
我想查询ActiveRecord模型,修改它,并以mb计算新对象的大小.我该怎么做呢?
不幸的是,数据库中数据行的大小以及内存中 ruby 对象的大小都不容易获得。
虽然了解内存中对象的大小比较容易,但您仍然必须找到属于活动记录对象的所有对象,因此应该对其进行计数(这并不明显)。即使这样,您也必须处理一些不明显的事情,例如共享/缓存数据、类开销,这些可能需要计算,但不是必须的。
在数据库方面,它很大程度上取决于所使用的存储引擎。从数据库的文档中,您通常可以扣除表中定义的每个列的存储要求(对于 VARCHAR、TEXT 或 BLOB 列,这可能会有所不同。最重要的是共享资源,例如索引、常规表开销,...为了进行估计,表中各列的记录大小要求应该足够了
一般来说,对于像数据库行或内存对象这样的复杂事物,很难获得正确的大小。这些系统不是为了收集或提供此信息而构建的。
除非您绝对需要获得准确的数据,否则您应该避免空间太大。一般来说,对于数据库来说,拥有太多的磁盘空间(在这种情况下,数据库通常会运行得更快一点)或太多的内存(这将减少 Ruby 的内存压力,从而再次使其更快)并没有什么坏处。
通常,Ruby 进程的内存使用情况并不明显。因此,最好的做法几乎总是编写程序,然后使用所需数量的实际数据对其进行测试,并检查其性能和内存要求。这样,您就可以获得所需的实际信息,即:我的程序在处理所需的数据集时需要多少内存。