有没有更快的方法来添加我的多对多DBIC关系?

时间:2014-02-17 00:22:15

标签: sql perl orm dbi dbix-class

我所谓的

之间存在多对多的关系

对象和对象组。

ObjectGroup只是一个“组”或对象和一个对象可以属于许多对象组。

例如

ObjectGroupA
-------------
ObjectA
ObjectB
ObjectC

ObjectGroupB   
-------------
ObjectA
ObjectB
ObjectC
ObjectD

这些ObjectGroup属于设备

我已经将Objects和ObjectGroups通过multireate放入数据库,但现在我需要建立多对多关系(我无法弄清楚如何做到这一点 通过multireate。我确实阅读了文档)。如下;

my $device = $device_rs->create(
 {
   devicename      => $deviceName,
   objects         => \@objects,
   object_groups   => \@objectgroups
 }
);

然后,对于关系,我构建了一个数组哈希,其中ObjectGroup(Parent)是键,数组包含对象的名称。然后为每个对象组我 移动子对象列表并通过add_to_ $ rel。

添加它们
foreach my $parent (keys %childobjects) { 
  my $parent_objectgroup = $device->object_groups->find({objectgroupname => $parent}); 
    foreach my $child (@{$childobjects{$parent}}) { 
      my $child_object   = $device->objects->find({objectname => $child}); 
        if ($child_object) { 
          #add the child object from the array to the object-group 
          $parent_objectgroup->add_to_childobjects($child_object); 
        } 
     } 
} 

这很有效,但是因为我有很多关系需要建立,所以非常慢。任何人都可以用DBIC建议更快的方法吗?

1 个答案:

答案 0 :(得分:1)

好的,除非我完全迷失在此,否则有一件事似乎浮现在脑海中。

您似乎将批量数据填充到这些表中,作为某种初始加载或转换或其他内容。从你上一次例行开始,你似乎已经有了一些概念devices具有哪个objects以及哪个group等等你正在进行的匹配。

考虑到这一点,似乎合乎逻辑的做法就是用你已经知道的关系密钥填充每个表。加载每个表格要比循环更快,并尝试计算出您应该已经知道的数据关系。

您尝试用于批量加载的操作旨在用于更多 atomic 目的,您将在多对多上下文中添加新关系。这些将以编程方式很好地工作,因为您添加了额外的deviceobject group等。

但是,您应该已经知道此批量数据的关联,只需将其加载到表中即可。