需要一种优化的方法来处理实体组合以提高性能

时间:2019-05-25 22:30:16

标签: database algorithm design-patterns data-structures database-design

因此,我正在研究Web应用程序中的功能。问题是这样的- 我有四个不同的实体。假设它们是-Item1Item2Item3Item4。该功能分为两个阶段。假设第一阶段是-Choose entities。在第一阶段,用户可以选择为每个实体选择多个项目,对于该选择中的每个组合,我都需要进行一些计算。然后在第二阶段(假设Relocate phase)-根据在第一阶段完成的计算,对于每种组合,我将不得不让用户选择另一个组合,其中第一组合的值将被删除到行中第二种组合。

这里是用于进一步说明的数据模型-

EntityCombinationTable
(
  Id
  Item1_Id,
  Item2_Id,
  Item3_Id,
  Item4_Id
)

ValuesTable
(
  Combination_Id,
  Value
)

所以假设我在两个值中都有以下值-

EntityCombinationTable
Id -- Item1_Id -- Item2_Id -- Item3_Id  -- Item4_Id
1     1           1           1            1
2     1           2           1            1
3     2           1           1            1
4     2           2           1            1
ValuesTable
Combination_Id -- Value
1                 10
2                 0
3                 0
4                 20

因此,如果在第一阶段-我为项目1选择(1,2),为项目_2选择(1,2),为项目3和项目4选择1,那么总组合将为2 * 2 * 1 * 1 = 4。

然后在第二阶段中,对于值大于零的每个组合,我将不得不让用户选择其他组合,以重新分配值。

例如-由于仅具有ID 1和2的组合的值大于零,因此第二个对话框中仅需要显示两个重定位组合。因此,如果用户在第二阶段中选择(3,3,3,3)和(4,4,4,4)作为重定位组合,则需要在其中插入新行 EntityCombinationTable代表(3,3,3,3)和(4,4,4,4)。并且(1,1,1,1)和(2,2,1,1)的值将分别重定位到与(3,3,3,3)和(4,4,4,4)中对应的行ValuesTable

问题是-每个实体的项目最多可以包含100个甚至更多。因此,在最坏的情况下,组合的总数可能是10 ^ 8,这将导致数据库的工作量很大(插入和更新表中的大量行),并且在代码级别生成所有组合都将需要大量时间。

我曾考虑过一种不将项目组合在一起的替代方法。而是为每个实体保留单独的表。然后在运行时进行组合。这也将导致性能问题。因为有更多不同的阶段可能需要组合。所以每次我都需要生成所有组合。

我还考虑过创建键值对类型表,在该表中将组合保留为字符串。但是用这种方法,我实际上并没有减少要插入的行数,而是减少了列数。

所以我的问题是-在这种情况下,有什么更好的方法可以跟踪组合并以优化的方式进行操作?

注意-我不确定这是否有帮助,但是values表中的许多行的值可能都为零。因此,在第二阶段中,我们需要显示比实际可能组合数少得多的行

0 个答案:

没有答案