如何在Rails中获取mb中ruby对象的大小?
我想查询ActiveRecord模型,修改它,并以mb计算新对象的大小。 我该怎么做呢?
遗憾的是,数据库中数据行的大小以及内存中ruby对象的对象大小都不容易获得。
虽然对内存中的对象大小感觉更容易一些,但您仍然必须找到所有参与活动记录对象的对象,因此应该对其进行计数(这并不明显)。 即使这样,您也必须处理非显而易见的事情,例如共享/缓存数据,类开销,这可能需要计算,但不必。
在数据库方面,它在很大程度上取决于所使用的存储引擎。 从数据库的文档中,您通常可以扣除在表中定义的每个列的存储要求(在VARCHAR,TEXT或BLOB列的情况下可能会有所不同。除此之外还有共享资源,如索引,一般表开销,…为了得到估计,表中各列的文档大小要求应该足够了
通常,很难为数据库行或内存中的对象等复杂事物获取正确的大小。 系统不是用于收集或提供此信息的。
除非你绝对需要获得确切的数据,否则你应该在太多空间方面犯错误。 通常,对于数据库来说,拥有太多磁盘空间(在这种情况下,数据库通常会运行得更快)或内存太多(这将减少Ruby的内存压力,这将再次使其更快)并没有什么坏处。
通常,Ruby进程的内存使用量并不明显。 因此,最好的做法几乎总是编写程序,然后使用所需数量的实际数据进行测试,并检查其性能和内存要求。 这样,您就可以获得所需的实际信息,即:我的程序在处理所需数据集时需要多少内存。
记录的大小完全取决于您的数据库,它独立于您的Ruby on Rails应用程序。 要弄清楚如何获得大小将是一个挑战,因为您需要询问DATABASE有多大,而Rails(按设计)可以使您远离数据库的实际实现细节。
如果您需要知道存储空间以估计要购买的硬盘大小,我会做一些基本的数学运算,比如内存中的估计大小,然后乘以1.5给自己一些空间。
如果您真的需要知道它有多大的空间,请尝试记录您在磁盘上有多少可用空间,写入几千条记录,然后再次测量,然后进行数学计算。
- 如何通过特定的prority对activerecord查询进行排序
- 有没有办法使用AREL进行自定义关联?
- Rails:相同两个模型之间的多个连接表
- rails activerecord,friend relation + inverse_friend关系如何获得相互关系? 代码包括在内
- 何时保存has_many关系中的Active Record对象?
- ActiveRecord :: Base的未定义方法`mysql_connection’:Class
- 在Ruby on Rails 3中制作通用模型时出现的问题
- gmail和parse_resource gems之间的Ruby自动加载冲突
- 有没有办法将params传递给rails中的postgres原始查询?