我一直想知道这个问题,但从未真正深入研究过。
情况是这样的:我有一组比较大的数据实例。每个实例都有相同的集合或属性,例如:
# a child instance
name
age
height
weight
hair_color
favorite_color
list_of_hobbies
通常我会将一个子项表示为一个散列,并将所有子项保存在散列的散列(或散列数组)中。
这种方法总是困扰我的是,我并没有真正利用所有子项(内部哈希)都具有相同结构的事实。如果数据真的很大,那么似乎可能会浪费内存,所以如果每个内部哈希都是从头开始存储的,那么似乎数据的名称键名可能比数据本身占用更多的空间......
另请注意,当我构建此类数据结构时,我经常nstore
将它们写入磁盘。
我想知道是否创建一个孩子object从这个角度来看更有意义,尽管我并不真正需要面向对象。会不会更紧凑?查询起来会比较快吗?
或者也许将每个孩子表示为一个数组是有意义的?例如。:
my ($name, $age, $height, $weight, $hair_color, $favorite_color, $list_of_hobbies) = 0..7;
my $children_h = {
James => ["James", 12, 1.62, 73, "dark brown", "blue", ["playing football", "eating ice-cream"]],
Norah => [...],
Billy => [...]
};
print "James height is $children_h->{James}[$height]\n";
回想一下,我主要关心的是空间效率(存储时的 RAM 或磁盘)、时间效率(即加载存储的数据集,然后从实例 y 获取属性 x 的值)和……便利性(代码可读性等)。
Thanks!