Architecture 客户端到数据库vs客户端到服务器到数据库

Architecture 客户端到数据库vs客户端到服务器到数据库,architecture,Architecture,我必须选择创建新应用程序的方式:客户机数据库(在存储过程中实现业务逻辑)或客户机服务器数据库(在服务器端实现业务逻辑,让存储过程只具有数据表示函数) 现在存在存储过程,它允许非常智能地创建DB,而“客户端不应该有业务逻辑”的论点是不好的:对于存储过程,它可能没有太多的业务逻辑。我应该为什么创建服务器?或者我不需要它,应该在存储过程方面尽可能地实现max 如果我需要联系许多数据库,我可以通过异步连接与服务器联系。对于DB variant,我可以使用dblinks(据我所知,甚至还可以是异步的) 这

我必须选择创建新应用程序的方式:客户机数据库(在存储过程中实现业务逻辑)或客户机服务器数据库(在服务器端实现业务逻辑,让存储过程只具有数据表示函数)

现在存在存储过程,它允许非常智能地创建DB,而“客户端不应该有业务逻辑”的论点是不好的:对于存储过程,它可能没有太多的业务逻辑。我应该为什么创建服务器?或者我不需要它,应该在存储过程方面尽可能地实现max

如果我需要联系许多数据库,我可以通过异步连接与服务器联系。对于DB variant,我可以使用dblinks(据我所知,甚至还可以是异步的)


这是首选项的问题,还是存在我还没有看到的架构需求和逻辑?

大多数现代应用程序尽可能使其数据库变得愚蠢。将逻辑从中剔除可以使应用程序更具可伸缩性、可测试性和可移植性

将业务逻辑放入存储过程意味着您必须通过创建越来越大的数据库来支持应用程序,从而垂直扩展应用程序

与测试独立的业务逻辑层相比,测试存储过程是众所周知的困难和昂贵的

它还将您紧密地连接到单个数据库提供程序

如果这些都不是问题,那么将所有逻辑放入存储过程可能是一个可行的解决方案。我从未见过一个基于存储过程的应用程序不是一团糟。我并不是说它们本质上是邪恶的,但我几乎总是看到它们被误用,而由此产生的“泥球”应用程序通常是一种废弃和重写的事情

无论如何,请阅读以下内容:


谢谢,我已经列出了一些相关的论点,但你添加了一些我没有找到的有趣的链接。关于垂直缩放,将所有相关数据保存在一个数据库中不是一件好事吗?我的意思是,不管怎样,我们为一种类型的实体保留一个数据库,所以,这里的垂直缩放不是参数,不是吗?如果您使用的是模型层(服务器层),您不需要将整个域保留在单个服务器上。您可以将相关数据放在不同的服务器上。例如如果您有一个客户数据库,另一个客户订单数据库。您可以在一个单独的商店中拥有有关客户的查找数据(地址、发票选项、登录名等)。并在模型层中将两个存储区合并在一起。这可以很好地扩展,因为这两个数据源具有非常不同的使用模式(高读与高写),并且可以非常不同地扩展。