您如何处理现有系统中新数据的收集和存储?
How do you handle collection and storage of new data in an existing system?
我是系统设计的新手,被要求解决一个问题。
给定一个汽车租赁服务网站,我需要开发一项新功能。
该公司已经提出了一些他们想要捕获和分析的更多数据以及他们已有的数据。
这些新数据可能是 assemble 汽车的时间和成本。
我需要了解以下内容:
1:从API设计的角度,我应该如何处理这个问题?
2:更改表的架构是否有任何好处,如果可以的话?
3:可以使用哪些数据库?
存储的值可以更改。例如,assemble 的时间可以减少或增加,因此用户应该能够更新值。
为了回答你的问题,让我们把它分成两部分,理想架构和问答
架构:
一个典型的系统将包含许多协同工作以解决实际问题的技术。问题可以通过多种方式解决,并且可能有不止一种解决方案。我们在这里不是在谈论任何架构的效率和有效性,因为它是一个全新的探索主题。但选择最适合您的用例的东西总是明智的。
由于您已经构建了现有的软件,因此遵循其现有的设计模式总是有帮助的,这将帮助您详细了解现有代码并允许您创建逻辑块,这些逻辑块将非常适合并且实际上有助于集成功能而不是反对它。
由于这清除了预规划阶段,让我们讨论一下这如何影响我认为哪种解决方案最适合您的用例。
问答
1.从 API 设计角度来看,我应该如何解决这个问题?
会有很多假设,除了由 api 组成的系统之外,任何东西都应该在需要时具有基本的身份验证和授权功能。除此之外,尽量坚持完整的 REST 规范,这将允许 API 消费者遵循标准路径,并且在决定端点的外观以及他们对消费者的期望时,集成的影响最小。
无论如何,并非所有系统都适用于此类用例,因此系统设计者有多少系统与标准实践兼容。
当新版本 api 将具有 api/v2 时,名称约定很重要
路径和旧路径有 api/v1,这是路由的好习惯
新功能。这允许系统无缝扩展。
2:如果可以的话,更改 table 的架构是否有任何好处?
短期内当你没有太多数据时,迁移数据相对容易。当它变得巨大时,它会更加痛苦和资源密集。
好的做法可以让您避免可能不需要迁移数据的情况。
数据库规范化在潜在数据结构会缓慢增长并需要引起注意的情况下变得如此重要。
无论使用任何sql或不使用sql解决方案,良好的数据结构总是有助于数据管理和编程实现。
在我看来,让数据结构接近完美总是一件好事
想法,因为它会降低未来的迁移成本和
它带来的挫败感。仍然有一些用例需要添加
列并且可以添加它们,只要它没有太多
对现有代码的影响。否则它总是可以解耦
单独 table 用于附加字段。
3:可以使用哪些数据库?
通常任何 rdbms 都足以完成此类任务。当您看到仍在集群中使用 mysql 的大型数据创建者的案例研究时,您可能会感到惊讶。
所以答案是,只要你有正常的场景,就继续选择你选择的任何数据库,直到你达到它的单实例可扩展性限制。对于小型到 mod 规模的应用程序,这些限制非常大。
How should I approach the problem, from API design perspective?
设计一个适合它需要存储的数据的良好数据模型。 API 设计将遵循数据模型。
Is changing the schema of your tables going to do any good, if that is an option?
新数据是否属于现有表?那么也许你应该把它存放在那里。除了:您可以在不破坏任何现有应用程序的情况下添加新列吗?也许你可以,但你需要进行回归测试来证明它对你的时间表来说可能是毁灭性的。分开的桌子可能是更安全的选择。
Which databases can be used?
您对正在处理的数据的性质相当模糊,但它似乎是结构化的(数字?)。因此,这表明具有强数据类型的 SQL 是最合适的。除此之外,使用当前正在使用的任何数据平台。任何从不同产品中感知到的好处都会被部署它的复杂性和麻烦所扫除。
最后一句话。与你的老板(或任何给你这项任务的人)讨论这个问题。不要依赖互联网上一些随机陌生人的意见。
我是系统设计的新手,被要求解决一个问题。
给定一个汽车租赁服务网站,我需要开发一项新功能。
该公司已经提出了一些他们想要捕获和分析的更多数据以及他们已有的数据。
这些新数据可能是 assemble 汽车的时间和成本。
我需要了解以下内容:
1:从API设计的角度,我应该如何处理这个问题?
2:更改表的架构是否有任何好处,如果可以的话?
3:可以使用哪些数据库?
存储的值可以更改。例如,assemble 的时间可以减少或增加,因此用户应该能够更新值。
为了回答你的问题,让我们把它分成两部分,理想架构和问答
架构:
一个典型的系统将包含许多协同工作以解决实际问题的技术。问题可以通过多种方式解决,并且可能有不止一种解决方案。我们在这里不是在谈论任何架构的效率和有效性,因为它是一个全新的探索主题。但选择最适合您的用例的东西总是明智的。
由于您已经构建了现有的软件,因此遵循其现有的设计模式总是有帮助的,这将帮助您详细了解现有代码并允许您创建逻辑块,这些逻辑块将非常适合并且实际上有助于集成功能而不是反对它。
由于这清除了预规划阶段,让我们讨论一下这如何影响我认为哪种解决方案最适合您的用例。
问答
1.从 API 设计角度来看,我应该如何解决这个问题?
会有很多假设,除了由 api 组成的系统之外,任何东西都应该在需要时具有基本的身份验证和授权功能。除此之外,尽量坚持完整的 REST 规范,这将允许 API 消费者遵循标准路径,并且在决定端点的外观以及他们对消费者的期望时,集成的影响最小。
无论如何,并非所有系统都适用于此类用例,因此系统设计者有多少系统与标准实践兼容。
当新版本 api 将具有 api/v2 时,名称约定很重要 路径和旧路径有 api/v1,这是路由的好习惯 新功能。这允许系统无缝扩展。
2:如果可以的话,更改 table 的架构是否有任何好处?
短期内当你没有太多数据时,迁移数据相对容易。当它变得巨大时,它会更加痛苦和资源密集。
好的做法可以让您避免可能不需要迁移数据的情况。
数据库规范化在潜在数据结构会缓慢增长并需要引起注意的情况下变得如此重要。
无论使用任何sql或不使用sql解决方案,良好的数据结构总是有助于数据管理和编程实现。
在我看来,让数据结构接近完美总是一件好事 想法,因为它会降低未来的迁移成本和 它带来的挫败感。仍然有一些用例需要添加 列并且可以添加它们,只要它没有太多 对现有代码的影响。否则它总是可以解耦 单独 table 用于附加字段。
3:可以使用哪些数据库?
通常任何 rdbms 都足以完成此类任务。当您看到仍在集群中使用 mysql 的大型数据创建者的案例研究时,您可能会感到惊讶。
所以答案是,只要你有正常的场景,就继续选择你选择的任何数据库,直到你达到它的单实例可扩展性限制。对于小型到 mod 规模的应用程序,这些限制非常大。
How should I approach the problem, from API design perspective?
设计一个适合它需要存储的数据的良好数据模型。 API 设计将遵循数据模型。
Is changing the schema of your tables going to do any good, if that is an option?
新数据是否属于现有表?那么也许你应该把它存放在那里。除了:您可以在不破坏任何现有应用程序的情况下添加新列吗?也许你可以,但你需要进行回归测试来证明它对你的时间表来说可能是毁灭性的。分开的桌子可能是更安全的选择。
Which databases can be used?
您对正在处理的数据的性质相当模糊,但它似乎是结构化的(数字?)。因此,这表明具有强数据类型的 SQL 是最合适的。除此之外,使用当前正在使用的任何数据平台。任何从不同产品中感知到的好处都会被部署它的复杂性和麻烦所扫除。
最后一句话。与你的老板(或任何给你这项任务的人)讨论这个问题。不要依赖互联网上一些随机陌生人的意见。