最近转去了做互联网开发,看到了最大的不同就是后台代码算法比较多,模块服务化,很多逻辑都写在了后台代码中,比如各种计算甚至连诸如分组排序这种SQL最擅长的功能。
到底逻辑是应该写在后台程序中还是SQL中?这个话题其实没少讨论过,我这里仅想把一些看法总结下。如果这个问题交给数据库专家去回答,那么十有八九的答案是写在SQL中,理由如下。
- 性能尽在掌控中,集群,共享存储,表分区,索引,in memory table, 安全,成熟,稳定,让我更有自信。
- 能适应业务的快速变化,不需要打包编译,大部分时候改下视图或者存储过程就ok.
- 往往用后台代码写的复杂逻辑只需要一条SQL就搞定(前提是保证性能),这样能减少网络开销,只传输需要的数据,减少网络调用次数,同时也减少了应用服务器的压力。
- 后台程序太自由,标准不统一,维护成本更昂贵。
如果是一个Java专家或者架构师可能会这样说,将逻辑尽量写在后台代码中,理由如下:
- 后台服务的扩展比数据库扩展容易,理论上能无限水平扩展。
- 对数据库的性能依赖小,可移植性好,阿里曾经在去IEO的浪场中由O移植到Mysql。
- 对于大部分的应用性能瓶颈都在数据库的方面,表设计以及SQL应该尽量简单,这样各种ORM框架能发挥最大的用处。
- 关系数据库有性能扩展瓶颈,对于大型互联网应应该该鼓励去关系化。
以上是我总结的各门派的观点,任何一方大师都没有说错,但是拿到网上讨论的时候没有加上任何上下文会以偏概全。一个大型的系统信息输入量很大,我们需要将OLTP跟OLAP分开。对于OLTP系统,在乎的是响应时间,对于读多写少的数据我们使用本地、分布式缓存,而且有很多更新的事务操作,根据OO的职责单一原则,对于需要频繁访问或者对数据库性能把控不好的情况下,我们确实应该将SQL写的尽量不要太复杂,不要将业务写在trigger或者存储过程中。这里前提别忘了,数据库的性能瓶颈是对磁盘的IO, SQL依然能做很多方便的工作,比如分组计算,这是各种数据库最基本的功能,并不会产生太大的额外开销,而这种功能写在后台代码中需要通过网络将所有的数据传输过来再分组。对于分布式缓存,我们有很多的计算结果不一定来自于OLTP,我们可以将数据实时的复制到OLAP系统,让OLAP计算出结果了存入缓存以服务的方式提供给OLTP去调用。
对于系统做迁移,我也谈谈我的看法,大家都一致认为由于数据库平台的差异性导致SQL的可一只性不怎么好,这个不可否认,但是如果一个系统需要迁移了,基本是旧的系统架构支撑不了日益增长的业务了,这种迁移工作本来就是一个很复杂的工程,涉到架构的变动是大概率事件,这种情况下还讨论可移植性还有多大意义? 通常都是换架构框架的多,单纯换数据库的少。
对于可读性,我觉得都不应该以五十步笑百步,SQL的优势在于逻辑集中,而后台的服务程序分散,还要依赖于开发人员的素质。无论哪种方式都不如文档,无论什么形式的文档,只要能将问题表述清晰都是很有帮助的。曾经做过项目交接工作,当问项目负责人某个不常用看起来简单但是很重要功能的具体实现逻辑的时候,迟迟没有回应,后来我就自己去读代码,各种服务交叉调用,各种缓存到处设置,阅读起来非常吃力。而如果强调写SQL,我曾经看过让我看一眼就望而却步的SQL, 各种case when,各种函数,达到上千行。
相关推荐
在这样的技术栈下,后台程序不仅需要处理用户的请求,如商品检索、订单创建、用户登录等,还需要与前端小程序进行数据交换,这通常通过API接口实现。API设计应遵循RESTful原则,提供清晰、安全的接口规范,以便前端...
6. **安全性考虑**:在ASP和SQL结合的系统中,需要关注SQL注入攻击的防范,这通常通过预编译的SQL语句(如参数化查询)或存储过程来实现。此外,还需要对用户输入进行验证和过滤,防止恶意代码的执行。 7. **性能...
在IT行业中,后台代码是构建任何复杂应用程序的基础。它处理数据、执行业务逻辑以及与数据库交互,确保系统能够高效地运行。"企业通用管理后台"这个压缩包文件很可能包含了一个适用于多种企业管理场景的后台系统代码...
在“微信小程序+Java后台完整代码”中,我们可以看到一个完整的电商解决方案,包括前端的小程序部分和后端的Java服务。小程序商城的部分主要负责展示商品、处理用户交互、实现购物车功能、订单管理以及支付流程等。...
在“asp+sql+server+程序代码系统——极品论坛”中,ASP起着核心作用,负责接收用户请求,处理数据,然后返回响应。 SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。在这里,SQL Server是...
描述中提到“这代码太弱了”,可能意味着初学者在编码时可能存在一些常见的问题,如逻辑混乱、未充分考虑异常情况、代码复用性差等。为提高代码质量,应遵循良好的编程规范,学习设计模式,以及进行代码审查和重构。...
【标题】"网站后台模板vs2005+sql2005"指的是使用Microsoft Visual Studio 2005(VS2005)开发工具和SQL Server 2005数据库系统创建的网站后台管理模板。这个模板可能是为了简化网站后台设计过程,提供一种快速构建...
【ASP+SQL+Server程序代码仓库管理系统】是一个基于ASP(Active Server Pages)技术,结合SQL Server数据库的强大后台支持,用于高效管理和存储程序代码的系统。ASP是一种微软开发的服务器端脚本语言,常用于构建...
ASP.NET后台管理框架SQLServer版是一个专为开发者设计的高效、稳定的Web应用程序开发框架,它基于微软的.NET Framework,主要用于构建强大的、数据驱动的后台管理系统。这个框架与SQL Server数据库紧密集成,提供了...
在后台管理系统中,SQLServer可以提供稳定的数据存储和查询能力,支持复杂的事务处理,满足大数据量和高并发的业务需求。 在ssm-crm-new这个项目中,我们可以推断这是一个基于SpringMVC、MyBatis的CRM(Customer ...
在给定的标签 "sqlserver delphi 服务程序" 中,"服务程序" 指的是 Windows 服务,这是一种在后台运行的程序,即使没有用户登录也可以持续运行。将 SQL Server 备份整合到 Windows 服务中,意味着该程序可以在无人...
【标题】"电商微信小程序+后台管理+sql.zip"是一个包含完整的电商应用解决方案,整合了微信小程序前端、后台管理系统以及数据库配置。这个项目为开发者提供了一个可以参考和学习的实例,帮助他们快速理解和掌握微信...
《学生宿舍管理信息系统设计源程序代码 - SQL Server 2000》 在这个项目中,我们探讨的是一个基于SQL Server 2000的学生宿舍管理信息系统的源代码设计。这样的系统对于大学校园的日常运营至关重要,它能有效地帮助...
"后台用sql做的"强调了SQL在系统架构中的核心作用,用于存储、处理和管理数据。"前台用C#写的"揭示了前端界面是使用C#编程语言构建的,这通常涉及到Windows Forms或ASP.NET框架。"功能齐全,界面美观"表明该系统不仅...
在这个项目中,前端使用了微信小程序的开发框架,如WXML和WXSS,用于构建页面结构和样式,JS进行业务逻辑处理。后端则采用PHP语言,构建服务器端的应用,处理API请求,与数据库交互。 2. **PHP后端开发**:PHP作为...
在这个公寓系统中,SQL Server作为后台数据库,存储租户信息、房间状态、租赁合同等数据。 4. 数据库设计:在公寓系统中,数据库设计是关键。可能包括租户表(Tenant)、房间表(Room)、合同表(Lease)等,每个表...
【ASP+SQL+Server+程序代码系统——图书系统】是一个基于经典的Web开发技术组合的图书管理系统,用于管理和操作图书馆的日常事务。这个系统利用了Active Server Pages (ASP)作为前端开发语言,结合Microsoft SQL ...
在Asp.Net开发中,SQL注入是一个非常重要的安全问题,它允许恶意用户通过输入特定的SQL语句来操控后台数据库,可能导致数据泄露、系统瘫痪甚至整个网站的安全性受到威胁。"Asp.Net通用Sql防注入源码"是针对这个问题...
在这个"SQL注入漏洞演示源代码"中,我们可以深入理解这种攻击方式的工作原理以及如何预防它。 SQL注入是一种利用不安全的Web应用程序设计来操纵后台数据库的攻击手段。当用户输入的数据未经充分过滤或验证直接拼接...