如何存储在实体流经系统时匹配实体的属性匹配规则对象?

时间:2018-01-01 04:18:55

标签: database amazon-web-services design-patterns database-design nosql

我需要帮助找出一种存储(以及稍后检索/匹配)动态规则的好方法,这些规则可用于在对象流经工作流系统时对其进行匹配。

在这种情况下,我正在构建一个系统,该系统将在对象最终准备存储以供稍后在另一个API中使用之前对发布到它的对象进行操作。这些步骤需要由管理员配置;系统应该允许他们说"如果一个对象通过属性ABC,然后对它执行操作XYZ"。以下是系统流程的基本概念:

+-------+  +-----------+ +-----------+ +-----------+ +-----------+ +-------+
|       |  |           | |           | |           | |           | |       |
|       +--> Ruleset 1 +-> Ruleset 2 +-> Ruleset 3 +->   Object  +->       |
|       |  |           | |           | |           | |  Storage  | |       |
| Input |  +-----+-----+ +------+----+ +-----+-----+ +-----------+ | Final |
|  API  |        ^              ^            ^                     |  API  |
|       |  +-----+--------------+------------+-----+               |       |
|       |  |                 Rule                  |               |       |
|       |  |              Management               |               |       |
+-------+  +---------------------------------------+               +-------+

对象与配置规则的匹配需要基于属性(如下例所示)。也就是说,管理规则的人需要能够提供一个或多个属性名称以及该属性的值,并且系统将需要在具有该属性名称/值组合的对象通过时运行该规则它。此外,无论何时创建或编辑规则,我们都需要能够找到与新/已编辑规则匹配的所有已保留对象。

例如,请考虑已配置以下规则:

Rule 1 {
   priority: 10,
   $match: {
      type: "gadget",
   },
   $set: {
      priceIncrease: 1.2,
   }
}

Rule 2 {
   priority: 10,
   $match: {
      type: "widget",
   },
   $set: {
      priceIncrease: 1.1,
   }
}

Rule 3 {
   priority: 100,
   $match: {
      type: "widget",
      category: "kitchen",
   },
   $set: {
      priceIncrease: 1.15,
   }
}

然后,以下三个实体通过系统:

Entity 1 {
   type: "widget",
   category: "toys",
   manufacturer: "Acme",
   price: 5,
}

Entity 2 {
   type: "widget",
   category: "kitchen",
   manufacturer: "Acme",
   price: 6,
}

Entity 3 {
   type: "gadget",
   category: "tools",
   manufacturer: "XYZ Co",
   price: 10,
}

当每个实体流经系统时,这里是匹配:

  1. 实体1(玩具小部件)仅匹配规则2,因为它是小部件。
  2. 实体二(厨房小部件)匹配规则二和三,因为它是一个厨房小部件。
  3. 实体三(工具小工具)与规则一匹配,因为它是一个小工具。
  4. 我并不太关心如何存储需要进行的实际操作 - 你可以忽略那部分;存储在数据存储中的操作将与知道如何在规则匹配后理解操作的数据结构的代码相关联。

    主要关注的是:要使用哪种数据存储,以及使用哪种数据模型来存储规则和实体,以便我可以:

    1. 在实体通过系统时查找与实体匹配的规则,
    2. 在规则更改或添加到系统时查找与规则匹配的实体(来自已保留的实体)。
    3. 由于我们将AWS用于我们所做的一切,并尝试尽可能多地执行无服务器,如果数据存储可能是AWS提供的托管服务,那将是一个很大的好处。例如,是否存在用于执行此操作的模式:

      • 关系数据库(Aurora)
      • NoSQL键/值(DynamoDB / Redis)
      • 图表数据库(海王星)

      数据集不会很大,但也不会变得微不足道;数百万个实体将通过该系统,并且将有数百个规则,因此对于任何类型的操作都不进行全表扫描。

      另外,如上所述,系统的正确术语是什么?当然,已经有设计模式/术语,但我很难找到合适的。

      谢谢!

0 个答案:

没有答案