为什么银行单位几乎都用Oracle?

为什么银行单位几乎都用Oracle?,第1张

现在都在清理,所有涉及国家和民生的要害部门的设备和软件,全部要求用国产,第一批2022年完成,这是国家安可工程强制要求的,你看看现在新上的数据库,那有国外厂家中标的。

这么多只为oracle背书,有点讽刺(国外的屎对这群人来说都是香的)。当初用只是无奈之举,若有选择,绝对没人用。商用软件很多都有后门,根本没有安全可言,(技术无国界)就是流氓逻辑,未来数据安全为王,oracle也会死在“闭源”上,至于说的“安全、高效”就是扯淡,国内“基础”技术越来越好,迟早要替代这些没有控制权的软件。

我的回答:银行单位选择oracle数据库,有很多的原因。

1oracle数据库是世界上第一个商用闭源关系型数据库,是比较成熟的产品。oracle具有先进的、成熟的市场经验。产品遍布各行各业,oracle的产品和技术已经广泛用在金融、电信及通信、证券、保险、能源、高 科技 、生产制造、以及政府等行业,oracle技术具有强大的领先优势。

2oracle具有高可用的架构优势,可以使用oracle rac、DataGuard、MAA等架构保障业务的稳定性、可靠性、连续性。oracle可以满足业务的高并发需求,满足OLTP各种事务处理。具有低成本、高性能、易伸缩、高可用、安全和集中管理等特点。

3oracle可以使银行提高客户服务水平、规避和控制金融风险、保证银行业务和利润的持续增长。oracle有一系列成熟的配套软件和专业的服务,可以满足银行单位的业务发展需求。尽管随着金融领域业务的变化,有去IOE和云化的变化,但是oracle的稳定性肯定是银行业务的首选,可以促进金融行业的业务转型与升级。

这样想,银行单位选用oracle数据库,合情合理!



不以泪水博同情,要以汗水赢掌声。你能作茧自缚,必能破茧成蝶!

第一,几十年前银行系统建设的时候只能选择IOE,根本没有其他的选择。

第二,目前中国的IT基础设施还无法满足银行的业务需求。

具体说oracle,他的一致性,稳定性,成熟度不是其他软件可以比拟的,你总不会希望你银行,交易所里面的钱有异常吧

不开源 安全性高 高效稳定 支持高并发

一句话,技术支持可以做到724小时,重大问题8小时内技术人员到岗,那一个开源软件可以做到。另外就是IBM的DB2也有一部分份额。

早年间MySQL和Linux都不成气候,银行是第一批使用小型机+Oracle的行业

真正的原因是银行信息化起步早。在90年代,无论是银行还是互联网都采用商用数据库。在那个时间段,MySQL和Linux都不成气候,更别提现在的大数据技术技术了。那时候,在小型机(Unix系统)上跑Oracle非常流程,MySQL根本没办法与其匹敌。

互联网企业在那个年代都热衷于Oracle,比如,阿里巴巴在2000年左右还养着全国最优秀的OracleDBA团队。只不过,后来这些互联网公司爱折腾,有实力折腾,开始用开源的MySQL替代了原来的Oracle,而银行既没有意愿有没有能力去做这件事。

核心业务强依赖Oracle,牵一发而动全身

至于到现在,银行为什么还没有替换到Oracle呢?主要是银行的业务已经成型,很多核心的功能都强依赖于Oracle,不可能轻易动,这是伤筋动骨的大事。

Oracle本身也具有很多优势

Oracle的安全级别非常高,这是MySQL不能比拟的。支持闪回和完美的数据恢复,及时硬件坏了也可以恢复到故障发生前1秒。

Oracle对于复杂的SQL场景支持得非常好,有出色的查询优化器。超强劲的CBO优化器在大部分场景可以对复杂SQL形成高效的执行计划,开发人员可以编写大量的表关联、子查询、几何运算等,我见过几百上千行的SQL或者存储过程,都有非常高的查询性能。

Oracle提供了自己的RAC架构,RAC架构推出后,即使使用普通的服务器,在低成本下实现也能实现数据的可靠性,还能提供很强的查询性能。

现在有没有Oracle的替代品呢

阿里云的 云原生数据库PolarDB完全替代Oracle数据库 ,PolarDB使用了存储和计算分离架构,可以在业务高峰期进行快速扩容,最大程度降低成本。PolarDB可以100%兼容MySQL语法,深度兼容Oracle的语法和数据类型。在2020年,阿里云已经帮助1千多家公司完成了去Oracle的工作。

这个问题其实一点都不难想象。

银行的数据极其重要,不容有半点损失和误差。

Oracle就是全球最好的数据库软件供应商。

金融行为要求的是系统稳定,系统稳定才能更好服务客户。

系统性能的要求在实时性方面在接受范围就可以,比如交易超时在60秒内等。

但是随着第三方支付的快速发展,交易量大幅度提高,则导致了银行系统在稳定性,时效性,性能方面都提升了一个或多个等级,tps的提高,系统压力也越来越大。

因此应用保证正常的情况下,数据显得更为重要。而在国内早此年,数据库的厂商还真没有,就oracle,db2,其实还有informix。

现在的情况,在国内出现一些商用的数据库,比如阿里系的,腾讯系的。

你这问题放在五年前差不多 现在你再看看有多少 现在去IOE去的差不多了

您好,分布式数据库和神经网络之间存在着一定的差异。分布式数据库是一种数据库技术,它能够将数据分布在多台服务器上,从而提高数据的存储和处理能力。而神经网络则是一种人工智能技术,它可以通过模拟人脑的神经元网络来进行学习和思考,从而实现自动化的学习和决策。因此,分布式数据库和神经网络之间的差异在于:分布式数据库是一种数据库技术,它能够将数据分布在多台服务器上,从而提高数据的存储和处理能力;而神经网络则是一种人工智能技术,它可以通过模拟人脑的神经元网络来进行学习和思考,从而实现自动化的学习和决策。

与特征码的用法一样。在hash前加上“magnet:xt=urn:btih:”,再复制进迅雷里面,就能得到种子。torrent文件本质上是文本文件,包含Tracker信息和文件信息两部分。

Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的B编码规则进行编码。

它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入torrent文件中;所以,torrent文件就是被下载文件的“索引”。

根据BitTorrent协议,文件发布者会根据要发布的文件生成提供一个种子文件。下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。

如果数据量小的表,这样的设计意义不大,而且当然是单表速度快。若在大数据量情况下,设计非常有意义。在多表连接中注意数据的条目和外健,避免出行大量冗余数据导致性能下降。下面我以Oracle讲讲数据查询的整个过程技术。

由于数据分布到数据块,在大量数据设计中可以将数据存储于多个数据块,在高并发进程的随机访问的情况下,能有效减少块冲突 同样的数据需要更多的数据块来存储,由于数据块的块头元信息大小固定,所以需要更多的空间来存储块头元信息。行长度过大容易导致行连接,从而导致Oracle获取数据块的效率降低 ,在行长度固定的前提下,单块能够存储更多的数据行,也就意味着Oracle一次I/O能读取更多的数据行。适合连续顺序读或者存放大对象数据(如LOB数据) 由于大数据块可以存放更多的索引叶节点信息,容易引起争用,所以大数据块不适合存放索引叶节点信息。

大量数据表的数据库参数设置DB_FILE_MULTIBLOCK_READ_COUNT表示Oracle一次顺序I/O读 *** 作最多能读取的数据块块数。该参数的默认值随 *** 作系统的不同而不同。在全表扫描或者索引快速扫描比较多的系统中(如DSS系统),建议将该值设置得较大。但是DB_FILE_MULTIBLOCK_READ_COUNT参数受 *** 作最大单次I/O大小的限制,大多数 *** 作系统单次读 *** 作的大小不能超过1MB,这也就意味着在8KB数据块大小的情况下,该参数最大值为128。值得一提的是,该参数的大小还会影响Oracle CBO对执行计划的评估,如果设成较大值,Oracle的执行计划倾向于全表扫描。当该参数设置为0或者保持默认时,CBO假设全表扫描时最多能连续读取8个数据块。从Oracle 11R2开始,DB_FILE_MULTIBLOCK_READ_COUNT的取值算法如下:

db_file_multiblock_read_count = min(1048576/db_block_size , db_cache_size/

(sessions db_block_size))

注意 数据库参数BLOCK_SIZE在设定之后,在数据库生命周期内不可更改。

当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读。当相应数据已在内存,就会逻辑读。我物理读是磁盘读,逻辑读是内存读;内存读的速度远比磁盘读来得快。

下面将本人大数据分区设计截图,为大家参考学习。

先贴俩图镇镇场。

引言

对于内连接,使用单个查询是有意义的,因为你只获得匹配的行。

对于左连接,多个查询要好得多。


数据说话

看看下面的基准测试:

5个连接的单个查询

一行5个查询

注意,我们在两种情况下得到了 相同的结果 (6 x 50 x 7 x 12 x 90 = 2268000)


总结一下

对于冗余数据,左连接使用更多的内存。

如果只执行两个表的连接,那么内存限制可能没有那么糟糕,但通常是三个或更多的表,因此值得进行不同的查询。


写在最后

用过Laravel吗?还记得 Eloquent ORM模型吗?

不知道有没有注意到,debug所打印出来的多表联合查询,

都是拆分为“单个表查询”,然后使用PHP处理的。

Happy coding :-)


是做表连接查询还是做分解查询要具体情况具体分析。

如果数据库的结构合理,索引设计得当,表连接的效率要高于分解查询。比如,在有外键的时候,数据库可以为外键建表并建立索引从而提升多个表连接查询的效率。另外,多表连接查询不需要把数据传输到应用程序中,直接在数据库端执行,这在很大程度上提升了效率。

但是多表连接也有一些缺点。多表连接对表结构的依存度很高,只要表结构出现变更就会同时对数据库检索和应用处理两个部分产生较大影响。另外,多表连接的兼容性不好,数据库不同SQL文也多少有些差异。而且采用分散数据库的时候,实现多表连接即麻烦又没有什么好处。因此,一些大型系统或者是支持多种类数据库的系统一般不会使用多表连接,而倾向于采用分解查询。

这个得看情况,一般数据不大的情况下多表连接查询和多次单表查询的效率差不多。如果数据量足够大,那肯定是多次单表查询的效率更高。在很多大的公司里面,都会禁用多表连接查询,原因就是一旦数据量足够大的时候多表连接查询效率会很慢,而且不利于分库分表的查询优化。那么看一下下面这个例子。

两种查询方式的比较

我这里有一个数据库,我们拿里面的客户表和地区表做两种查询的对比。用户表数据是31万条,地区表3511条。

1 使用连表查询成都市的客户总数

2使用多次单表查询客户总数

可以看到,查询出来的结果都是一样,但是第一种的连表查询用了067秒中,而第二种多次单表查询一共用时014秒。这个对比已经是很明显了吧。

虽然这只是一个很简单的例子,但是对比结果是非常明显的。在实际应用中可能会更复杂、数据更多,如果还使用连表查询时非常慢的,而且还消耗服务器资源。

所以现在在很多大了公司明确要求禁止使用join查询,比如阿里、腾讯就明确规定禁用三表以上的join查询。

总结一下,单表查询的优点

1 多次单表查询,让缓存的效率更高。

许多应用程序可以方便地缓存单表查询对应的结果对象。另外对于MySQL的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。

2 将查询分解后,执行单个查询可以减少锁的竞争。

3 在应用层做关联,更容易对数据库进行拆分,更容易做到高性能和可扩展。

4 查询本身效率也可能会有所提升。

5 可以减少冗余记录的查询。

6 在应用中实现了哈希关联,而不是使用MySQL的嵌套环关联,某些场景哈希关联的效率更高很多。

7 单表查询有利于后期数据量大了分库分表,如果联合查询的话,一旦分库,原来的sql都需要改动。

8 很多大公司明确规定禁用join,因为数据量大的时候查询确实很慢

所以在数据量不大的情况下,两种方式的查询都没什么明显的差别,使用多表连接查询更方便。但是在数据量足够大几十万、几百万甚至上亿的数据,或者在一些高并发、高性能的应用中,一般建议使用单表查询。

如果觉得笨猫的回答对你有用,点个关注,非常感谢。

做java的,在orm框架下,分解查询是最符合面向对象 *** 作的,挺支持分解查询的(拙见)

先说结论:不一定。

多表查询效率低的时候,可以考虑拆解sql成多个小的sql,至于效率是否一定会提高,这个还不一定,具体问题具体问题。当多表查询效率低的时候,拆解成单个小sql,这只是一个可能的思路,起不起作用,不一定。

sql是一个很复杂的东西,sql引擎会分析执行计划,并可能按照他认为最优的执行计划执行sql,但他认为的也不一定是正确的。不同的sql执行计划不一样,所以很难断定sql拆解或者合并的效率。

说了这么多,那到底是多表联合查询还是拆解呢?有没有一个原则? 有!如果你确定你的单个sql的执行效率比较快,当然可以写多个单个sql。当然了,具备这个能力需要你对数据库足够了解,比如什么时候走索引,什么时候nested loop等等。如果你现在的多表联合查询比较慢,你需要找出来慢的原因,并分析拆解后的sql的执行计划,看是否避免了多表联合查询的效率问题。


总之吧。这个问题,只能给你一个大体的思路,因为牵扯到很多基础问题,我觉得最起码sql执行计划应该需要了解,一个sql可能的执行计划有几十中,复杂sql的执行计划又是这几十种的组合。哪种效率低,哪种效率高应该有个大体了解。


多表查询可以很快,也可以很慢。主要看执行计划。

单次肯定是多表连接查询的效率高,但多次单表查询的吞吐量高,而且容易优化,例如分库分表,使用缓存减少DB访问次数等等,所以在大数据量高并发场景通常使用多次单表查询的方式。另外,不管是单表还是多表连接查询,SQL的执行时间和数据量、并发量都有很大关系,和扫描的数据行数也很有关系。如果一条SQL,平时执行一次要2秒,10个并发时,系统可能一点问题都没有,1000个并发时,数据库可能就被拖死了。我们组之前碰到过好几次这种问题,一张只有几万条数据的表,因为忘记加索引,平时执行只有几百毫秒,高峰期直接飙到几十秒,DB差点被拖垮。

单纯从效率来讲,join的表不太多时,join效率比较高。但是占用的主要是数据库服务器的资源。数据库资源又是个瓶颈,不易横向扩展。所以在数据量大的时候,我们会采用单表查询,把循环和匹配等大量工作移到应用服务器上。应用服务器容易扩展,对并发支持更好。

当数据量大到千万级以上,就建议尽可能减少join,鼓励使用单表查询。查询优化比较容易。这时候使用join的一个大型查询就可能花很久,对其他查询造成阻塞,导致服务不可用。

当考虑单表查询后,就会衍生一系列的策略,比如冷热数据分离,将热数据和 历史 数据分离,大幅降低数据量级以提高热数据查询性能,并可以使用内存缓存。这样又促使你考虑引入微服务架构。

总结,数据量小,查询并发少,那么使用join的性能是可控的,开发成本低。当数量级上升到千万级且不断增加,尽早考虑向单表查询切换,否则可能有性能下降会导致系统奔溃。而且性能下降不是线性的,会陡降。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/12650292.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存