Architecture n层系统是否会使;“感觉”;用于大型数据集处理?

Architecture n层系统是否会使;“感觉”;用于大型数据集处理?,architecture,n-tier-architecture,Architecture,N Tier Architecture,我最近成为了开发我们“旗舰”产品的开发团队的一员。它主要是一个在N层系统中实现的阅读密集型web应用程序(asp.net(c#)和oracle)。数据库中的大多数写入都是通过外部服务完成的(而不是通过webapp)。他们不是在数据库中调度正常的批处理作业来进行数据聚合,而是将所有的事情都推到了业务层(有时是创建一亿个对象)。虽然这确实使所有“业务逻辑”保持在同一位置,但它也比在数据库中运行等效查询花费大约200倍的时间。这对我来说似乎是个糟糕的主意。我错了,这是标准的好东西吗?是否有人有任何我可

我最近成为了开发我们“旗舰”产品的开发团队的一员。它主要是一个在N层系统中实现的阅读密集型web应用程序(asp.net(c#)和oracle)。数据库中的大多数写入都是通过外部服务完成的(而不是通过webapp)。他们不是在数据库中调度正常的批处理作业来进行数据聚合,而是将所有的事情都推到了业务层(有时是创建一亿个对象)。虽然这确实使所有“业务逻辑”保持在同一位置,但它也比在数据库中运行等效查询花费大约200倍的时间。这对我来说似乎是个糟糕的主意。我错了,这是标准的好东西吗?是否有人有任何我可以向我的同事(或我自己,如果我错了)指出的真实案例研究


我不是在争论n-tier是好是坏,但它适合数据聚合处理等吗?

关于处理时间(以及资源,如内存),您是对的

  • 最佳实践是聚合尽可能接近数据的数据,最好是在数据库中。一亿个物体看起来很疯狂
  • 然而,我们都知道,这样的代码不易维护。因此,开发时间更长,最终成本更高
所以你需要达到一个正确的平衡。这不能从外面传给你,
您必须在项目的特定环境中仔细权衡优势

例如,频率所有这一切都非常重要。如果这一过程每分钟都在进行,那么高昂的成本显然是可以接受的,但如果它每年都在进行,成本可能就不高了


也许正确的平衡需要两者兼而有之。例如,要获得良好的投资回报率:

  • 对数据库的查询可以进行第一级的聚合,去掉微小的细节,并将要创建的对象数量减少100个
  • 业务层可以应用其余的规则
是什么使查询中需要注意的需求成为一个好的候选者:

  • 降低从数据库中取出的对象(或行)数量的低级聚合
  • 很少改变的规则
  • 易于在SQL中读取的规则
为了使您的代码更加明确(并减少查询之间的重复),我建议您的代码采用一种编译时结构,使其更加清晰。创建显式常量或函数,这些常量或函数包含您将放入查询中的每个业务规则,并使用这些常量或函数构建(在运行时或编译时)查询