多个组件数据存储在一张表中

问题描述 投票:0回答:1

我正在开发一个项目,帮助管理员将应用程序基础设施信息存储在一个地方。 在规划阶段,我面临着如何以最佳方式存储和处理一些组件信息的问题。

例如,管理员可以创建一个应用程序并向其中添加一些服务,例如(Web 应用程序、Lambda、Win 服务等)。管理员可以为每个服务分配不同类型的组件:

  1. API 组件(字段:URL、密钥、版本等)
  2. Okta 组件(字段:发行者 URL、回调、应用程序 ID、密钥)
  3. Umami(领域:环境、脚本、链接等)
  4. ....

Approximate application hierarchy

我想创建一个名为 Components 的表,其中包含 Id、ServiceId、Data、Type 等列,并将所有组件相关数据以 JSON 格式存储在 Data 字段中,转换为 Base64,并在每次需要时对其进行序列化/反序列化。 关键想法是我稍后将扩展应用程序,并希望能够轻松添加新组件而无需修改核心代码。

您能建议一些好的方法来实现所需的应用程序行为吗?

提前致谢。

c# .net oop design-patterns database-design
1个回答
0
投票

您使用 json 数据的方法已经非常可扩展。为 json 数据创建一个多态处理程序就足够了。添加新组件只需要一个新的处理程序,而无需更改数据库和其余基础设施。

但是,最好不要将 json 存储在 base64 中,而是存储在专门设计的类型中,例如 postgres jsonb。它更高效且更易于操作。

此设计可能会出现 3 个小问题。

  1. 更改 json 结构。例如添加一个新字段。这可以通过在正常查询期间动态更改已弃用的结构来解决。
  2. 并发查询。当 2 个查询尝试同时更改一个 json 时。出现这个问题是因为json是在应用服务器上处理的。可以使用幂等密钥来解决。
  3. 按 json 中的字段过滤记录的查询。像 postgres jsonb 这样的特殊类型将允许您直接在数据库中执行此操作,但它仍然会很慢。但据我了解您的任务,您不需要这样的查询。
© www.soinside.com 2019 - 2024. All rights reserved.