如何在Rails中获取mb中ruby对象的大小?

我想查询ActiveRecord模型,修改它,并以mb计算新对象的大小。 我该怎么做呢?

遗憾的是,数据库中数据行的大小以及内存中ruby对象的对象大小都不容易获得。

虽然对内存中的对象大小感觉更容易一些,但您仍然必须找到所有参与活动记录对象的对象,因此应该对其进行计数(这并不明显)。 即使这样,您也必须处理非显而易见的事情,例如共享/缓存数据,类开销,这可能需要计算,但不必。

在数据库方面,它在很大程度上取决于所使用的存储引擎。 从数据库的文档中,您通常可以扣除在表中定义的每个列的存储要求(在VARCHAR,TEXT或BLOB列的情况下可能会有所不同。除此之外还有共享资源,如索引,一般表开销,…为了得到估计,表中各列的文档大小要求应该足够了

通常,很难为数据库行或内存中的对象等复杂事物获取正确的大小。 系统不是用于收集或提供此信息的。

除非你绝对需要获得确切的数据,否则你应该在太多空间方面犯错误。 通常,对于数据库来说,拥有太多磁盘空间(在这种情况下,数据库通常会运行得更快)或内存太多(这将减少Ruby的内存压力,这将再次使其更快)并没有什么坏处。

通常,Ruby进程的内存使用量并不明显。 因此,最好的做法几乎总是编写程序,然后使用所需数量的实际数据进行测试,并检查其性能和内存要求。 这样,您就可以获得所需的实际信息,即:我的程序在处理所需数据集时需要多少内存。

记录的大小完全取决于您的数据库,它独立于您的Ruby on Rails应用程序。 要弄清楚如何获得大小将是一个挑战,因为您需要询问DATABASE有多大,而Rails(按设计)可以使您远离数据库的实际实现细节。

如果您需要知道存储空间以估计要购买的硬盘大小,我会做一些基本的数学运算,比如内存中的估计大小,然后乘以1.5给自己一些空间。

如果您真的需要知道它有多大的空间,请尝试记录您在磁盘上有多少可用空间,写入几千条记录,然后再次测量,然后进行数学计算。