讨论:应不应该用存储过程?

2023-11-03 13:20

本文主要是介绍讨论:应不应该用存储过程?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

讨论:应不应该用存储过程?

事情起因于群里转发一篇文章《为什么阿里巴巴禁止使用存储过程?》

作者用自己的亲身经历讲解存储过程维护的不方便。

然后大家讨论存储过程的优势和缺点。

 

引子:存储过程

大白:存储过程在很多场景时有其优势,比如性能。但对于业务逻辑的通用方法,非常不推荐将其写在存储过程中,代码复用、扩展与客户端语言比,相差甚远。也许终究能实现,但代价与风险比客户端语言要高,得不偿失。

花也花不完:我的想法是可以用,分场景

如果应用的当,省时省力

我用的比较多

主要是性能是第一,依据自身去控制

 

Steven:用起来,比较难控制,把握度

曾经在做ERP的时候把整个计划翻单用存储过程实现

然后没有人能改,牵扯表太多,逻辑有太复杂,那时候有些炫SQL的感觉,现在想来比较坑人

后来项目,部长禁止存储过程

 

康利山:现在很多公司, 是一刀切, 不让用不是说这个东西不好, 只是大家场景可能用不熟导致安全问题

 

Steven:如果人员变化比较频繁,存储过程的确会增加业务理解时间,相对于牺牲些速度,也不是很在意了吧。写不好,速度反而更慢。写得好,自然是省事、省力

 

花也花不完:

不是这样你们是要性能还是要可读,想好

存储过程,对他限制,一定是没有能力去驾驭

不能怪存储过程

一个存储过程4000多行代码,我写过,解决了20TB数据的处理时间有原来8小时压缩到7分钟处理好

存储过程是一个双向的,关键是看你怎么去用好和管理好,性能是一个坎

 

场景:低延迟

kimmking:高效低延迟,一定是数据和计算放到一起,远古时代是存储过程。现代则是redis+lua,voltdb/hazelcast+java这种。我们叫 数据亲密性 data affinity。

看你要啥,一般情况,确实没必要用存储过程

存储过程,即不好编写,也不好调试,不适合大规模的业务系统协作开发

早期像银行核心的业务就没几个人懂,都是年纪大的老专家(中医,划掉),他们写好存储过程,外面用什么东西封装起来,变成指令,给前置系统调用就成了。这样,核心是稳定的,业务也是二十年不变的。

现在的互联网,上午定的需求,下午就不行了,你得敏捷。

 

花也花不完:找我,我可以玩转它

 

kimmking:哈,,,所以,企业需要的不是一个能搞定它的专家,而是一帮搬砖的,也能一起干活。

这叫软件开发的分布式。

就像我们用廉价pc的集群,去代替小机,mainframe,高端存储。

 

smith :

深度绑定了oracle 要换其他数据库很难

 

kimmking:

一样,我第一份工作是用的db2

10来年前,每年license2000-3000万,单位一旦过几年培养了一批db2专家,就直接去了IBM的DB2团队。

 

康利山:这差距也太大了吧

 

kimmking:

可以预期,存储过程里,可以用cursor一点点往前走,又抛去了网络开销

 

花也花不完:

 有一种东西交工具化,我不相信人可以一直坚持下去,让程序去做吧,该放手了

 

kimmking: 肯定在数据量大的时候,会快。

也是工具化,只是工具不同,

一般企业级开发,提倡快速开发框架RDP,半成品的脚手架之类的

 

花也花不完:

有空了,我们聊聊,我给你看看黑科技

 

kimmking:

说个关键词看看

 

vonneumann:

很多现代工程实践和设计理念确实没法做在存储过程里 太难管理了

 

kimmking:

我一直搞核心系统,低延迟交易我比较关注,这一块的黑科技,大概就是SPDK,RDMA,PM之类的

绕过操作系统通信,硬件加速,持久化内存。

 

花也花不完:

不知道怎么说了,就像c++一样,没有几人能玩转了

 

花也花不完:

在说存储过程好,估计有人要打我了

 

韩铮 vonneumann:

说极限场景意义不大哈 毕竟不是单打独斗 有几个人能用存储过程搞70倍性能优化

 

具体的几个技术

kimmking:

redis支持lua,大家知道吧

redis看做数据库,然后做点简单的计算,丢一段lua脚本给redis server,他算完了给你结果。

避免了大量的trip round

hazelcast,内存网格,支持动态的给一些类,同步到内存数据节点,计算完了给你结果,可以分布式的做聚合

voltdb更牛逼了,内存+关系数据库,作者是图灵奖获得者,数据库领域宗师,直接支持用java写“存储过程”

 

花也花不完:

接近内核运算

 

田浩沛:

8小时这么快?以前SAP有个系统出报表要7天,客户居然习惯的

 

kimmking:

我们去年上半年系统的调研和POC过,voltdb真心nb

 

花也花不完:

越贴进内核运算,是越好的,其它的就是概念

 

kimmking:

绑定cpu,cache对齐

低延迟的核心要素就是,离cpu能有多近就多近,离io能有多远就多远

 

vonneumann:

存储过程不是不好 是太容易被误用

这篇关于讨论:应不应该用存储过程?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/338444

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

OpenStack离线Train版安装系列—11.5实例使用-Cinder存储服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版