首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据存储到hash中的最佳方式,以便进行灵活的“数据透视表”计算

将数据存储到hash中的最佳方式,以便进行灵活的“数据透视表”计算
EN

Stack Overflow用户
提问于 2011-04-17 18:50:49
回答 2查看 1.3K关注 0票数 1

我有一个包含以下字段的数据集。

主机名、型号、位置、端口号、激活?、启动?

我会将它们转换成散列结构(可能类似于下面)。

代码语言:javascript
复制
my %switches = (
    a => {
        "hostname" => "SwitchA",
        "model" => "3750",
        "location" => "Building A"
        "total_ports" => 48,
        "configured_ports" => 30,
        "used_ports" => 24,
    },
    b => {
        "hostname" => "SwitchB",
        "model" => "3560",
        "location" => "Building B"
        "total_ports" => 48,
        "configured_ports" => 36,
        "used_ports" => 20,
    },        
},
);

最后,我想生成这样的统计信息: No。每栋建筑的交换机数量,第每栋楼每种型号的交换机总数每栋建筑的up端口数量

统计数据可能不仅限于建筑智慧,甚至可以是基于交换机的(即,否。开关的95%的使用率等)。使用给定的数据结构,我如何枚举这些计数器?

相反,有没有更好的方法来存储我的数据?我至少能想到一种格式:

代码语言:javascript
复制
 <while iterating over records>
 {
 hash{$location}->{$model_name}->count++;
 if ($State eq 'Active') {hash{$location}->{up_ports}->count++};

做这件事最好的方法是什么?如果我选择第一种格式(其中所有信息都在散列中保持不变),我如何混搭数据以生成不同的统计数据?(一些示例代码片段将非常有帮助!)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-17 21:28:16

如果你想要查询的灵活性,“数据库”策略通常是好的。您可以直接这样做,只需将数据放入SQLite之类的内容中。在这种方法下,您将能够对数据发出各种各样的查询,而无需编写太多自己的代码。

或者,如果您正在寻找一种纯Perl方法,那么近似数据库表的方法是使用数组数组,或者更好的代码可读性,使用散列数组。外部数组类似于数据库表。该数组中的每个散列都像一个数据库记录。基于Perl的查询最终将如下所示:

代码语言:javascript
复制
my @query_result = grep {
    $_->{foo} == 1234 and
    $_->{bar} eq 'fubb'
} @data;

如果您有太多的行,以至于查询性能成为瓶颈,那么您可以使用散列创建自己的索引。

代码语言:javascript
复制
%data_by_switch = (
    'SwitchA' => [0, 4, 13, ...],  # Subscripts to @data.
    'SwitchB' => [1, 12, ...],
    ...
);

我的答案是基于我收到的关于this question的答案,这与你的问题有一些相似之处。

票数 2
EN

Stack Overflow用户

发布于 2011-04-17 19:42:22

据我所知,您有一个元组列表,为了便于讨论,考虑具有2个属性的对象就足够了,例如location和ports_used。所以,举个例子:

代码语言:javascript
复制
(["locA", 23], ["locB", 42], ["locA", 13])  # just the values as tuples, no keys

你想要一个如下的结果:

代码语言:javascript
复制
("locA" => 36, "locB" => 42)

这是正确的吗?如果是这样,您面临的问题是什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5693073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档