我正在研究棕场迁移策略(从Multiplesight课程开始),在其中创建1个API /整体表。 我目前正在一个团队中,从一个整体迁移到可以在AWS上运行的微服务架构。
这是我遇到的问题/疑问:
我有2个表(已联接),还有一个Oracle存储过程,该存储过程使用这2个表创建了一个对象。 当然,Oracle非常高效。
但是,如果我将这两个表中的每一个放在单独的REST API中,那么创建该结果对象将涉及: -从表1中提取数据的1/3 -从表2中提取数据的1/2 -使用Java从这两个数据集(数百万条记录)构造结果。
我已经收到两个针对此问题的回复: 1)不必担心,您在云上具有几乎无限的计算能力,例如/一个EC2实例/微服务。 而且,如果您的API /服务必须执行一些繁重的工作(获取/处理数百万条记录),只需为其EC2实例提供大量功能(CPU,内存,存储等)
和...
2)将“两个”表都移到相同的api。
我不确定答案1,至于2,有时涉及多个表,例如10+! 同样,在解决方案2中,同样的问题也会出现,您可能需要提取多个1000s / 100000s的记录!!
任何建议都欢迎!! :)
答案 0 :(得分:1)
好吧,微服务并不意味着一种服务可以有一个端点。一种微服务可能会根据需求具有很少的端点。如果您可以从服务中获取更多收益,只需将多个表放入一个服务中,那就去做。
另一方面,Oracle PL / SQL比将它们组合为Java代码更有效。如果将它们放在两个或多个不同的服务中,则您必须更加小心应用程序中的许多内容以及性能,因为表具有数百万个条目。
更新:
关于您的第一个解决方案,即使您打算将此解决方案部署在AWS上,并且几乎AWS具有无限的处理能力,这都会花费您一笔巨款。 AWS的处理能力并不便宜。特别是,如果您可以采取一些措施来降低成本。
答案 1 :(得分:0)
我不知道您的确切体系结构,但是您应该像直接在Oracle上进行表联接那样进行操作,而不是分别访问每个表,然后从Java代码进行组合/聚合。采用这种方法应该比您目前正在做的事情效率更高。即使这些表驻留在单独的Oracle实例上,执行跨数据库查询,联接/聚合然后将单个结果集返回到Java代码,仍然可能会更有效。