Java访问数据库的速度瓶颈问题的分析及解决

Java 实现一个接口里面,查询多次数据库导致慢,优化方法来了(亲测有效) 接口优化 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> FoolsGarden@SMTH
自由Java传道士
2001 年 11 月

速度瓶颈问题的提出
在企业级的Java应用中,访问数据库是一个必备的环节。数据库作为数据资源的集散地,往往位于企业级软件体系的后方,供前方的应用程序访问。在Java技术的体系中,应用程序是通过JDBC(Java Database Connectivity)接口来访问数据库的,JDBC支持"建立连接、SQL语句查询、处理结果"等基本功能。在应用JDBC接口访问数据库的过程中,只要根据规范来操作,这些功能的实现不会出差错。但是,有些时候进行数据查询的效率着实让开发人员懊恼不已,明明根据规范编写的程序,却得不到预期的运行效果,造成了整个软件的执行效率不高。

起初,我们把问题归结于Java字节码加载和执行速度的缓慢,紧接着硬件的功能普遍得到了增强,证明这样的想法些许是错误的,还没有抓到真正的根本原因。本文将逐步解剖JDBC访问数据库的机制,深层分析造成这种速度瓶颈问题的原因,并提出在现有的Java技术框架下解决这个速度瓶颈问题的思路和方法。

JDBC访问数据库的机制

图1
图1
图2
图2

图1和图2描述了Java应用程序通过JDBC接口访问数据库的4种驱动模式,也就是底层实现JDBC接口的模式。对于这些模式,我们逐一介绍:

模式4:图1左边的分支称为模式4,它一般是数据库厂商才能实现的纯Java的基于本地协议的驱动,直接调用DBMS(数据库管理系统)使用的网络协议,对于企业内部互联网来说,是一个实用的解决方案。

模式3:图1右边的分支称为模式3,它同样是一个纯Java驱动,不同于模式4的是基于网络协议。它的机制是将JDBC调用转换为中间网络协议,然后转换为DBMS协议。中间网络协议层起到一个读取数据库的中间件的作用,能够连接许多类型的数据库,因而是最灵活的JDBC模式。这种模式的产品比较适用于企业内部互联网,如若支持国际互联网,还需添加对安全、穿过防火墙访问等的支持。

模式1:图2左边的分支称为模式1,即通常由Sun公司提供的JDBC-ODBC桥接器。它提供了经由一种或多种ODBC驱动进行访问的JDBC接口,而ODBC驱动,在很多情况下也即数据库的客户端,必须加载到客户机。因而,它适用于下载和自动安装Java程序不重要、实验用途或者没有其它JDBC驱动可用的情况下。

模式2:图2右边的分支成为模式2,类似于JDBC-ODBC桥接器,需要加载到客户机,却是一个部分用Java实现的驱动接口。它将JDBC调用转换为对数据库(Oracle、Sybase、Informix、DB2等)客户端接口的调用。

不同模式的JDBC接口的选择
以上阐述的JDBC接口的模式不同,让我们可以把JDBC接口按照实现的模式分为四类。有些同仁可能有这样的体会,选择不同的JDBC接口会有不同的访问速度,为何会出现这样的情况?这个问题的答案是,不同的应用需要不同模式的JDBC接口,因而我们在面对一个应用时,要慎重选择JDBC接口。

通常的DBMS都支持微软提出的ODBC规范,因而模式1可当作您在设计和实现软件时的选择,它易于配置的特性能够让你把选择JDBC等烦恼的问题暂且抛在一边,让自己的Java程序能够及早地正常工作起来。

一般说来,商业DBMS的提供者往往会为自己的数据库提供一个JDBC接口,应用的是模式4。这种模式的优势在于和数据库本身结合比较紧密,而且是纯Java的实现,在企业级的软件应用中,应该是首选。例如,对于Oracle数据库来说,有Oracle、SilverStream、DataDirect等公司提供这种类型的驱动,其性能往往被评价为最高效的、最可靠的驱动程序。但偶尔也有比较麻烦的情况,例如微软就不会提供MS SQL的JDBC接口,这时就需要到Sun的网站(http://industry.java.sun.com/products/jdbc/drivers)查找相关的模式4驱动,上面提到的DataDirect公司(http://www.datadirect-technologies.com/jdbc/jdbc.asp)就提供了支持MS SQL的模式4驱动,只是你需要支付750$购买这个JDBC驱动。

同样是纯Java实现的模式3,与模式4相比,优势在于对多种数据库的支持,体现了其灵活性。在大型的企业级的软件应用中,后台数据库往往不是一个,而且是由不同的厂商支持的。不过,模式3的JDBC驱动往往提供许多企业级的特征,例如SSL安全、支持分布式事务处理和集中管理等,因而会对你特殊的用途有很大的帮助。是否选用,还在于你对扩展应用是否有需求以及对多DBMS的支持。

谈到这儿,我对模式3和模式4作一个总结:两者都是纯Java实现的驱动,因而不需要数据库厂商提供附加的软件,就可以运行在任何标准的Java平台,性能上比较高效、可靠。

了解上述3种JDBC的实现模式之后,模式2就更容易阐释了,你可以理解它为前三者利弊平衡的妥协产物:

1借鉴模式1利用客户机本地代码库,加速数据访问的执行,但却摒除ODBC标准,而是支持厂商自己指定的性能扩展
2借鉴模式3利用多层结构,上层用Java实现,利于跨平台应用和支持多数据库,但下层却改为本地代码,加速执行速度
3借鉴模式4和数据库结合紧密的优点,部分用Java实现,更是对数据库性能有很大的扩展

这种开放和高性能的特征得到了业界的肯定,因而被主要的数据库厂商强烈推荐。尽管它需要你下载本地代码库到客户机,但相对于你访问数据库速度的提高,这些应该只是举手之劳了。下面对4种实现JDBC的模式选择,归纳一下选择的顺序(当然是指你有选择余地的时候,不存在的话向后推延):

编号选择过程分析选择顺序
1实验性环境下,尽可能选择易于配置的驱动,利于Java程序的开发,后期可在对应用环境进行判断后,再对JDBC模式进行选择1>2>3>4
2小型企业级环境下,不需要对多数据库的支持,因而模式2和3的有些优点并不能体现出来,强烈推荐你选择模式4的JDBC驱动4>2=3>1
3大型企业级环境下,需要对多数据库的支持,模式2和3各有千秋,但是更多情况下是你会选择速度较快的模式22>3>4>1

对于不同厂商提供的但应用相同模式的JDBC接口,理论上比较不出效率的高低,你只有通过一定的工具,例如Benchmark等,对它们进行比较才能更有利于你的选择。因为暂时不存在第三方提供的数据比较结果,所以这些问题需要你对上述内容有了透彻理解之后自行解决。

Java程序中SQL语句格式的优化
这个时候,你也许还在为找不到合适的JDBC驱动而一筹莫展,也许为自己在凌晨3点下载的JDBC驱动通过了测试而欣喜若狂,但是并不说明你对程序的优化工作已经无关紧要了。切记,对整个软件系统的优化,包括每个环节的优化,要不有可能你会前功尽弃。我在这儿不和大家讨论Java程序的算法,而是简单阐述一下选择SQL语句格式的必要和如何选择对自己有利的SQL语句格式。看下面两段程序片断:

Code Fragment 1:



String updateString = "UPDATE COFFEES SET SALES = 75 "   "WHERE COF_NAME LIKE 'Colombian'";

stmt.executeUpdate(updateString);

Code Fragment 2:



PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");

updateSales.setInt(1, 75); 

updateSales.setString(2, "Colombian"); 

updateSales.executeUpdate();

片断2和片断1的区别在于,后者使用了PreparedStatement对象,而前者是普通的Statement对象。PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,用PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。

这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的Statement对象毫无差异,体现不出它预编译的优越性。

软件模型中对数据库访问的设计模式的优化
在我阅读J2EE蓝图和JDO草案的过程中,我发现了访问模式对数据库访问的影响,因而想在本文中阐述如何针对自己的软件需求选择合适的软件模式。

J2EE蓝图的设计者在Java Pet Store示例应用中使用了MVC(Model-View-Controller)体系,给许多J2EE设计模式提供了背景。我要谈及的三种设计模式是:Data Access Object、Fast Lane Reader、Page-by-Page Iterator,它们为加快数据存取速度提供了一些可以在系统设计阶段值得我们借鉴的想法。

Data Access Object
将商业逻辑从数据存取逻辑中分离出来,把存取的资源改编,从而使资源可以容易和独立地转变。

依赖于底层数据资源的特殊要素(例如数据库的供应商)的商业组件,常将商业逻辑和数据存取逻辑配合起来,只能使用特殊类型的资源,而使用不同类型的资源时,复用将会非常困难,因此,只能服务于有限的市场领域。DAO(Data Access Object)即是将数据存取逻辑从EJB中抽去出来抽象为一个独立的接口,EJB根据接口的操作执行商业逻辑,而接口针对使用的数据资源实现为DAO对象。

在Java Pet Shop这个例子中,OrderEJB组件通过关联的OrderDAO类访问数据库,自身则关注于商业逻辑的实现。在调度阶段,将配置某一类(OrderDAOCS、OrderDAOOracle或OrderDAOSybase)为OrderDAO的实现,而OrderEJB无须任何更改。图3更能帮助你明白其中的道理:

图3  Data Access Object的设计模式
图3 Data Access Object的设计模式

此举增加了数据存取的弹性、资源的独立性和扩展性,但复杂度有相应的提高,其它附带的问题我们不在这儿讨论。

Fast Lane Reader
抛弃EJB,加速只读数据的存取。

有些时候,高效地存取数据比获得最新的数据更重要。在Java Pet Store中,当一个用户浏览商店的目录时,屏幕与数据库内容吻合不是至关紧要的,相反,迅速显示和重新获得非常重要。FLR模式可以加速从资源中重新获得大型的列数据项的速度,它不用EJB,而是更直接地通过DAO来存取数据,从而消除EJB的经常开支(例如远程方法调用、事务管理和数据序列化等)。

在Java Pet Store这个例子中,当一个用户浏览目录时,通过CatalogDAO(而不是CatalogEJB)从数据库加载数据项,而CatalogDAO是一个Fast Lane Reader的实例,使得读访问变得迅速,如图4:

图4  Fast Lane Reader设计模式
图4 Fast Lane Reader设计模式

与DAO模式不同的是,FLR是一个优化的模式,但不是要替代原有的访问机制,而是作为补充使其完备。当你频繁地只读大型的列数据和不必存取最新的数据时,使用FLR将是非常合适的。

Page-by-Page Iterator
为了高效地存取大型的远程数据列,一下子通过重新获得其元素为一个子列的Value Object(提高远程传输效率的设计模式,这儿不详尽描述)。

分布式数据库的应用经常需要用户考虑一长列数据项,例如一个目录或一个搜索结果的集合。在这些情况下,立刻提供全列的数据经常不必要(用户并不是对所有的数据项感兴趣)或不可能(没有足够的空间)。此外,当重新获得一列数据项时,使用Entity Bean的代价将非常高昂,一个开销来自于使用远程探测器来收集Requested Bean,另外,更大的开销来自对每个Bean产生远程调用以从用户获得数据。

通过Iterator,客户机对象能一下子重新获得一个子列或者页的Value Object,每一页都刚好满足客户机的需求,因此,程序使用较少的资源满足了客户机的立刻需求。

在Java Pet Store这个例子中,JSP页面product.jsp任何时候只显示一个数据列的一部分,从ProductItemListTag(Page-by-Page Iterator)重新获得数据项,当客户机希望看到列中的别的数据项,product.jsp再次调用Iterator重新获得这些数据项,流程见图5:

图5  Page-by-Page Iterator设计模式
图5 Page-by-Page Iterator设计模式

以上设计模式的应用向我们表明,在某些特殊情况下,优化对数据库的访问模型,既可满足用户的需求又可提高访问数据库的效率。这给我们一个思路,就是:在你的硬件环境可能会产生瓶颈的情况下,可以通过对软件模型的优化来达到满足需求的目的。上述三种设计模式的应用情形为:

Data Access Object需要将商业逻辑和数据存取逻辑分离;
在调度的时刻,需要支持选择数据源的类型;
使用的数据源的类型的变化,对商业对象或其它客户端完成数据存取没有影响。
Fast Lane Reader面对大型的列数据,需要经常的只读访问;
访问最新的数据并不是至关紧要的事情。
Page-by-Page Iterator存取大型的服务器端数据列;
任何时刻,用户只对列的一部分内容感兴趣;
整个列的数据不适合在客户端显示;
整个列的数据不适合在存储器中保存;
传输整个列的数据将耗费太多的时间。

在显示商品目录的时候,我们选择了DAO和FLR的结合,因为它们两者的条件都得到了满足(需要分离商业逻辑和数据存取逻辑,经常的只读访问和对即时性不敏感),此时应用将会大大发挥它们的优点。而在进行内容检索的时候,我们会选择PPI,因为也许检索出了上千条的记录,但是用户没有兴趣立即阅读全部内容,而是一次十条地阅读,或者他在阅读完前十条记录后发觉自己的目的已经达到,接下来浏览别的网页了,都不必我们一次性地传输上千条记录给他,所以也是PPI的应用条件得到了满足,结果则是此模式的优点得到了发挥,又不影响全局的数据访问。

在进行软件模型的设计时,整体的框架可以应用某些优秀的、通用的设计模式,这样既加快模型的建立速度,又能和其它系统集成。但是,碰到一些瓶颈问题的情况下,我们就需要对局部的设计模式做一些调整,以优化整个系统,上述三个模式就是对原有体系的补充,它们并没有对整体的框架做出巨大的改变,却突破了某些瓶颈(瓶颈往往是局部的)障碍,让我们的产品更好地服务于用户。

将深入研究的问题
开篇至今,我们主要探讨了软件层次上的解决问题,但是,必须肯定一点,如果你的硬件环境非常差(运行Java都有困难)或非常好(额外的存储空间、超快的运算速度和富裕的网络带宽),上述途径对你来说很难有大的帮助。前一种情况,我建议你升级硬件设备到软件厂商推荐的配置(强烈反对最小配置),以使应用服务器、数据库、Java等软件能够运行自如;后一种情况,我没什么话可说,花钱是解决这个问题最好的办法。

本文并未谈及线程池和告诉缓冲这两个非常重要的概念,因为笔者认为,它们是针对局部时间高访问量的瓶颈问题的解决,不能理解为简单的速度瓶颈问题,所以我会在下一篇文章中分析这种特殊的情况和提出解决问题的办法。也许你对这一点更关心一些,认为自己的问题就出在这个地方,这是非常好的思考问题的方式,你已经抓住了问题的关键。但是,我还是建议你通读一下本文,让自己对速度瓶颈问题有更好的理解,并掌握在解决问题的过程中,分辨常态和暂态,从而选择不同的思路入手。其实,本文谈及的就是速度瓶颈问题的常态,而下一篇文章讨论的将会是暂态,希望你能够渐入佳境。

JDO(Java Data Object)是需要我们关注的一个API,它定义了新的数据存取模型,直接借鉴了DAO设计模式。不同的数据源,有不同的数据存取技术,就有不同的API供开发人员使用。JDO正是为了解决这个问题而产生的,它实现了即插即用的数据存取的实现和持久信息(包括企业数据和本地存储的数据)以Java为中心的视图。因此,开发人员只关注创建那些实现商业逻辑的类和用它们来表现数据源的数据,而这些类和数据源之间的映射则由那些EIS领域的专家来完成。如果大家对JDO感兴趣的话,那么我会写第三篇文章把其详细介绍给大家,并给出示例应用。

参考资料

关于作者
曾任水木清华BBS的Java技术和嵌入式系统的讨论区负责人,对Java技术有很深的钻研和丰富的教学经历
曾在清华大学微电子学研究所从事Java智能卡微处理器的研究和开发
现任水木清华BBS的自由与协作的讨论区负责人,探讨网络协作的开发模式
参与JXTA项目的探讨,并为JXME(JXTA J2ME)项目的核心成员,致力于推动P2P在嵌入式(尤其是无线网络)领域的发展
致力于国内Java技术的推广宣传和普及教育
U8V10.1学生机房远程部署:IIS+SQL Server教学环境搭建指南 用友U8是会计电算化与ERP教学的核心实训平台,其U8V10.1版本采用典型的三层架构(客户端-Web服务-数据库),但教学场景对稳定性、批量部署和系统兼容性提出特殊要求。原理上,它依赖IIS承载Web服务与身份认证,SQL Server提供账套数据存储,二者需严格匹配版本(如IIS 7.5 + SQL Server 2008 R2)以规避驱动、协议及权限握手失败。技术价值在于构建可还原、可自愈的集中管控环境,避免单机安装导致的配置漂移与故障扩散;典型应用场景覆盖职业院校60台规模学生机房,支撑凭证录入、报 阅读详情

相关推荐

避坑指南:Checkmarx安装失败?从‘重新检查必要条件’报错到成功激活的完整排错手册

本文详细解析了Checkmarx安装过程中常见的‘重新检查必要条件’报错问题,提供了从环境预检、依赖项安装到许可证激活的完整排错指南。涵盖操作系统兼容性、IIS配置、.NET Core版本冲突等关键环节,帮助开发者高效完成企业级代码安全扫描工具的部署与优化。

weixin_42531128的博客 352

Windows系统80端口被System进程占用的诊断与解决方案

端口冲突是网络编程和系统运维中的常见问题,其本质是多个进程试图绑定同一网络端口导致的资源争用。在Windows系统中,端口占用通常由网络协议栈和系统服务管理机制决定,其中HTTP.SYS作为内核级驱动,负责处理HTTP请求的监听与分发,这是实现高性能Web服务的基础。理解端口占用原理对于保障服务稳定性和系统安全至关重要,尤其在本地开发、测试环境部署等场景中。本文聚焦于80端口被System进程占用的典型现象,深入剖析HTTP.SYS驱动与World Wide Web Publishing Service的协

weixin_34239169的博客 364

ASP.NET高性能与可伸缩性七层实操骨架

高性能与可伸缩性是现代Web系统的核心能力,其本质并非单纯提升单机处理能力,而是通过架构分治、进程隔离、可控衰减和配置调优,实现业务流量增长下的稳定响应。在ASP.NET生态中,IIS默认配置、EF连接管理、Redis缓存穿透、GC大对象堆等底层细节,往往比代码逻辑更直接影响系统吞吐与稳定性。结合金融级千万日活场景验证,本文聚焦.NET Framework 4.7.2+ Windows Server + SQL Server环境,拆解从请求入口到数据落盘的七层关键关卡,涵盖ARR智能路由、HttpModul

lanmh的专栏 590

Java数据库访问很慢/大量数据库连接

我这次的问题就是数据库的大量连接,只是一个用户想找上万条数据,但这种写法变成了上万个用户找对应的一条数据,每一条的查询返回其实并不需要多少时间,但是如果数据库连接池较小,连接和释放就会导致严重的时间损耗,浪费大量时间,但是实际运算量小的可怜。其实数据库不怕大数据量的访问(一般的业务也用不到那么大的数据量),但是同一时间大量用户的访问(即大并发量)才是数据库访问时害怕遇到的。今天遇到这么个问题,一样的代码从一个方法移到另一个方法后运行速度极慢。遇到问题的方法是一个访问数据库并输出excel文件的功能。

z2431435的博客 693

Foxmail Server v2.0公测版:Windows下搭建邮件系统全攻略

邮件服务器是企业内部沟通的基础设施,通过SMTP与POP3等标准协议完成电子邮件的收发与存储。自建邮件系统不仅能够保障数据安全,还能根据团队规模灵活配置,是许多中小型企业在Windows环境下的首选方案。Foxmail Server For Windows v2.0作为腾讯早期的邮件服务器产品,内置SMTP/POP3服务、Webmail及管理后台,支持域名绑定与账号批量导入,适合五十人以内的小型网络环境。本文从环境检查、安装向导、初始化配置到日常运维与健康检查,系统梳理了使用该公测版搭建邮件系统的完整流程,

weixin_33946020的博客 345

Win10+SQL2008 SP3+用友U8 V10.1安装全攻略:兼容性与排错指南

数据库是企业信息系统的核心,其部署环境是否兼容直接影响业务软件能否稳定运行。SQL Server 2008 SP3作为经典关系型数据库版本,虽然官方未正式支持Windows 10,但通过兼容模式与合理的依赖配置依然可以正常使用。用友U8 V10.1作为常见ERP财务软件,对IIS、.NET Framework及VC++运行库有特定依赖,在Win10 x64下安装常遇到服务无法启动、实例连不上等典型问题。本文从环境兼容性原理出发,梳理SQL Server 2008 SP3与用友U8 V10.1在Win10上的

weixin_34293911的博客 253

连接第一次连接MySqL数据库 相当慢

使用Java程序连接MySql数据库时,发现启动相关慢。 对代码进行测试,发现第一次连接时较慢。 以前用C++连接Oracle时,也遇到类似的问题。 当时找到原因是由于Oracle对连接进行了域名解析,由于DNS服务器不可达,要等到连接超时后,才抛出异常。详细信息请参考 http://blog.youkuaiyun.com/lijing_lj928/article/details/46953085 点

lijing_lj928的专栏 5023

c语言实现语音检测vad_壹鸽技术科普·智能语音客服系统中的前端语音处理技术...

随着智能客服机器人产业的迅速发展,尤其是伴随着人工智能AI的风潮,预计在2020年我国智能客服市场将达到万亿级别。在智能客服机器人领域中对电话信道语音进行端点检测处理的应用正在不断扩展和深化。目前语音端点检测(Voice Active Detection,简称VAD)的主要任务是准确快速判决出待处理的语音信号有话还是无话,作为自动语音识别(Automatic Speech Recognition,...

weixin_36431018的博客 508

Java大数据更新很慢的问题解决办法

Java大数据更新很慢的问题解决办法

zt1212121z的博客 615

数据分析实战:如何用皮尔逊相关系数避免伪相关陷阱(附Python代码)

本文通过实战案例与Python代码,深入解析了皮尔逊相关系数在数据分析中的应用与常见陷阱。文章重点揭示了如何识别与避免由混杂变量导致的伪相关,并介绍了通过可视化、敏感性分析、分层分析与偏相关分析等方法来检验相关性的可靠性,帮助分析师建立严谨的相关性思维。

weixin_29051245的博客 414

system_stm32f10x.c文件分析

配置系统时钟(包括系统时钟源、锁相环(PLL)倍频系数、高级高性能总线(AHB)/ 高级外设总线(APBx)预分频器以及闪存相关设置)。该函数在系统复位后的启动阶段被调用,且调用时机早于跳转到主程序之前。

Jia shuheng的博客 603

卸载iis express后80端口仍然被占用的解决方法

      前些日子因为要学asp.net,不会在win7下配置iis,偶然间发现了Web Martrix这个东东。安提示安装了好几个相关软件,运行起来,后来因为要在本机上运行apache,于是删除iis express相关软件,但重启后80端口仍然被占用。一阵百度谷歌,无解。又查看服务,又查看进程的,发现是system占用的,不能解决问题。然后自己去服务列表里一个一个找,看哪个像,最终发现有个叫

djun100的专栏 5335

uniapp 基于单选框多选框实现上拉触底多选/单选、回显

showPickerCheckbox弹层显示 label和value 类似下拉框的label和value一个意思 键和值。结果:可以传接口(接口只能post请求) 可以搜索 下面是结果图片展示 单选多选都可以。fieldValue回显传的值 传的是字符串 数组的话[1,2]转为1,2格式传入。mode是控制的单选还是多选 true为多选默认值 其余参数 单选多选一样。fieldName字段名 确定后会返回该字段名 根据字段名找对应的传入值。问题:在uniapp上 实现分页多选的操作。下面是组件的完整代码。

2301_76607997的博客 2936

在IIS Express中使用自定义域

Traditionally I use custom domains with my localhost development server. 传统上,我在本地主机开发服务器上使用自定义域。 So

CHCH998的博客 2653

2、稳定性问题全景图——死机、重启、ANR、Crash、黑屏五大类

当 Crash 发生在 system_server、surfaceflinger、mediaserver 等关键系统进程中时,其后果等同于系统级故障,可能触发 Zygote 重启甚至 kernel panic。这类问题在稳定性治理中的优先级应等同于 P0。

woailuojp的博客 49

【Pytorch实战教程】基于RML2018的融合网络分类 | LSTM网络和ResNet网络融合 | 含数据集的处理

这段代码是从原始数据中读取所选择的数据,画出星座图,并将星座图保存本地,然后将IQ数据保存成mat文件,将图片数据读取之后保存为npy文件,方便后续融合网络使用。

若北辰 929

任务管理器中的PID是什么?怎么查看?

PID是Process ID的简称,这对WINDOWS开发人员来说是非常有用的信息,但对于普通用户来说则根本不必去理会。 举个例子来说: 在网站发布的时候,需要安装IIS,那么iis的tcp的80端口就不能被占用。但如果被占用了,我们怎么查看被什么程序占用了呢? 1 在命令提示行中输入:netstat -an -p tcp -o,可以看到80端口被PID为1984的进程占用。 那么我就要找...

bulote 2336

linux那些事之numa balance

numa balance numa balance是页迁移技术最重要也是最开始使用应用的技术,主要是为解决由于调度器进程在两个node迁移造成访问内存性能问题。 numba balance通过页迁移技术,将不在运行节点的内存迁移到所运行的节点上。对应numa balance要注意几点: 防止进程在两个节点之前来回切换造成频繁进行页迁移(ping pang现场)从而影响性能。numa balance本身就是为了提高性能,不能因为造成频繁页迁移而对性能进行一个反向优化。 多个线程分布在不同线程 访.

weixin_42730667的博客 3908

47分钟从零部署Express后端服务实战指南

Express是基于Node.js的轻量级Web应用框架,用于快速构建RESTful API和动态网页。其核心原理依赖于中间件管道机制与请求响应循环,具备高可扩展性与低耦合特性。技术价值体现在开发效率提升、生态丰富(如Sequelize ORM、Winston日志)及与前端框架(Vue3/React)天然协同,广泛应用于电商后台、Mock服务及表单收集等场景。本文聚焦真实环境下的端到端落地:涵盖Node.js LTS版本选型、express-generator脚手架使用、端口冲突排查、MySQL连接实践及跨

weixin_32705179的博客 335

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2778

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SharePoint 2019 离线部署实战:Windows Server 2019 系统准备与依赖校验

SharePoint 是基于 Windows Server 的企业级协作平台,其部署本质是操作系统级集成工程。理解其依赖原理——如 .NET Framework 版本绑定、IIS 模块深度耦合、服务启动顺序与权限模型——是保障高可用性的前提。技术价值在于规避因网络隔离、策略限制或环境异构导致的安装失败;典型应用场景包括制造业OT内网、金融DMZ区及政务云等强管控离线环境。本文聚焦 SharePoint 2019 在 Windows Server 2019 上的离线部署核心路径,详解系统服务禁用逻辑、IIS

weixin_34391445的博客 463

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Blue Prism企业级部署:SQL Server集成与服务账户配置指南

RPA(机器人流程自动化)作为企业数字化转型的核心技术,其落地成败高度依赖底层基础设施的可靠性。Blue Prism并非普通桌面软件,而是一个需深度耦合SQL Server、严格权限管控、多服务协同的企业级自动化中枢。理解其运行原理——基于Windows Server的服务架构、数据库驱动的状态管理、域账户支撑的安全上下文——是规避90%部署失败的前提。技术价值体现在稳定性、可扩展性与生产就绪能力;典型应用场景包括财务对账、HR入职自动化、供应链单据处理等需高可用与审计合规的业务流程。本文聚焦Blue Pr

weixin_34246551的博客 552

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Node.js笔记分享

与浏览器为Js提供前端运行环境相对应,Node.js是基于V8引擎的Js运行环境,为Js做后端开发提供了可能。

让技术为我所用 921
上一篇: DataDirect的JDBC驱动
下一篇: JDBC的官方网站
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值