阅读更多
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。

该项目在阿里巴巴内部得到了广泛的部署,在外部也有大量的用户群。为了使大家更好地了解和使用Druid,我们采访了Druid项目的主要负责人——温少(博客)。

温少是ITeye的名人了,为了照顾新会员,先来个自我介绍吧! Top

我2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。

2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。

Druid是什么?有什么作用? Top

Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。

Druid的项目背景?目前的项目团队情况?开源目的? Top

2010年开始,我负责设计一个叫做Dragoon的监控系统,需要一些监控组件,监控应用程序的运行情况,包括Web URI、Spring、JDBC等。为了监控SQL执行情况,我做了一个Filter-Chain模式的ProxyDriver,缺省提供StatFilter。当时我还做了一个SQL Parser。老板说,不如我们来一个更大的计划,把连接池、SQL Parser、Proxy Driver合起来做一个项目,命名为Druid,于是Druid就诞生了。

2011年2月春节期间,我完成了连接池(DruidDataSource)的第一个版本,4月开始在生产环境测试,2012年第一季度开始大规模实施。

提交过代码的开发者有5个人,主要代码是我维护,有一人专门负责内部实施。

通过开源,希望有更多使用场景,更多的反馈,更多人参与其中,共同打造最好的数据库连接池。

Druid支持哪些数据库? Top

Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。

Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。

Druid是如何扩展JDBC的? Top

Druid在DruidDataSourc和ProxyDriver上提供了Filter-Chain模式的扩展API,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用。

为什么说Druid是“最好的数据库连接池”?体现在哪些方面?这是如何实现的? Top

阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。

首先,强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。

  • 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
  • SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。
  • 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。

其次,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。

Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的WallFilter。

阿里巴巴内部实现了用于数据库密码加密的CirceFilter,以及和Web、Spring关联监控的DragoonStatFilter。


第三,Druid集合了开源和商业数据库连接池的优秀特性,并结合阿里巴巴大规模苛刻生产环境的使用经验进行优化。

  • ExceptionSorter。当一个连接产生不可恢复的异常时,例如Oracle error_code_28 session has been killed,必须立刻从连接池中逐出,否则会产生大量错误。目前只有Druid和JBoss DataSource实现了ExceptionSorter。
  • PSCache内存占用优化对于支持游标的数据库(Oracle、SQL Server、DB2等,不包括MySql),PSCache可以大幅度提升SQL执行性能。一个PreparedStatement对应服务器一个游标,如果PreparedStatement被缓存起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似“SELECT * FROM T WHERE ID = ?”这样的场景,性能可能是一个数量级的提升。但在Oracle JDBC Driver中,其他的数据库连接池(DBCP、JBossDataSource)会占用内存过多,极端情况可能大于1G。Druid调用OracleDriver提供管理PSCache内部API。
  • LRU是一个性能关键指标,特别Oracle,每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,有助于数据库服务器优化,这是重要的指标。Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0则不是。BoneCP在mock环境下性能可能还好,但在真实环境中则就不好了。

Druid的性能如何?能否给出一些测试对比数据? Top

性能不是Druid的设计目标,但是测试数据表明,Druid性能比DBCP、C3P0、Proxool、JBoss都好。

这里有一些测试数据:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916539

谈谈Druid的SQL解析功能?效率如何? Top

Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。

简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。

Druid的扩展性如何? Top

Druid提供Filter-Chain模式的插件框架,通过编写Filter配置到DruidDataSource中就可以拦截JDBC的各种API,从而实现扩展。Druid提供了一系列内置Filter。

在SQL注入防御方面,Druid的优势是什么?实现原理是什么? Top

Druid的优势是在JDBC最低层进行拦截做判断,不会遗漏。

Druid实现了Oracle、MySql、Postgresql、SQL-92的Parser,基于SQL语法分析实现,理解其中的SQL语义,智能、准确、误报率低。

具体细节参考这里:http://code.alibabatech.com/wiki/display/Druid/WallFilter

目前Druid的应用(部署)情况? Top

Druid是阿里巴巴监控系统Dragoon的副产品,从Dragoon监控系统的数据来看,在阿里巴巴已经部署了600多个应用。在阿里巴巴外部也有很多Druid的用户,外部用户没有正式统计数据,但经常有反馈。

我想将其中的某个模块(比如监控模块)用到其他连接池,是否可以?模块的独立性如何? Top

可以通过DruidDriver把内置的Filter用在其他连接池中。在2011年上半年DruidDataSource不成熟的时候,我们也是这么做的。在其他连接池中使用内置的Filter,需要修改jdbc-url,使用DruidDriver作为一个ProxyDriver。

我想在项目中使用,应该注意哪些事项?能否用于商业项目? Top

Druid是一个开源项目,基于Apache 2.0协议,你可以免费自由使用。Druid只支持JDK 6以上版本,不支持JDK 1.4和JDK 5.0。

配置是否复杂?能否给出一个典型的配置实例? Top

为了方便大家迁移,Druid的配置和DBCP是基本一致的,如果你原来是使用DBCP,迁移是十分方便的,只需要把corg.apache.commons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。

以下是一个参考配置:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${jdbc_user}" />
    <property name="password" value="${jdbc_password}" />
     
    <property name="filters" value="stat" />
 
    <property name="maxActive" value="20" />
    <property name="initialSize" value="1" />
    <property name="maxWait" value="60000" />
    <property name="minIdle" value="1" />
 
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <property name="minEvictableIdleTimeMillis" value="300000" />
 
    <property name="validationQuery" value="SELECT 'x'" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
     
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
</bean>

在上面的配置中,通常你需要配置url、username、password、maxActive这几项。

在DruidDataSource中,你可以不配置DriverClass,它根据url自动识别。Druid能够自动识别20多中url,常见的JDBC Driver都包括了。

我目前使用其他连接池(DBCP/C3P0/Proxool等),如何迁移到Druid? Top

从DBCP迁移最方便,把org.apache.commons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。

Druid网站上提供了Druid/DBCP/C3P0/JBoss/WebLogic的参数对照表,通过这个对照表来迁移你目前的配置。

其他开发者如何反馈问题、提交bug? Top

Druid源码托管在github.com上,项目地址是https://github.com/AlibabaTech/druid

你可以在github上提交patch和issue(包括bug和新特性)。你也可以加入我们的QQ群92748305,和开发者以及其他用户一起交流。
  • 大小: 81.4 KB
  • 大小: 79.4 KB


评论 共 97 条
37 楼 magic4u 2012-07-17 15:05
wenshao 写道
magic4u 写道
最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。

阿里巴巴的大规模布署之后还不够么?  你能够找到比Druid更好的数据库连接池么?


hehe,作为开源产品来说,Druid缺乏案例证明,我不认为在阿里的环境中大规模部署了就是最好的东西,只能说是最合适阿里的东西。
另外,作为连接池framework来说,Druid做过市面上大部分数据库产品的兼容性测试么?
36 楼 wenshao 2012-07-17 14:22
swen00 写道
没找到jar,要自己编译?


有:
http://central.maven.org/maven2/com/alibaba/druid/0.2.4/
35 楼 wenshao 2012-07-17 14:21
xuershan 写道
在和mybatis整合的时候出现了个问题。最后修改了源码。


什么问题?是否能够反馈给我?
34 楼 xuershan 2012-07-17 13:53
在和mybatis整合的时候出现了个问题。最后修改了源码。
33 楼 swen00 2012-07-17 13:39
没找到jar,要自己编译?
32 楼 vb2005xu 2012-07-17 13:25
温少 是不是 那个json 库的 开发者?
31 楼 wenshao 2012-07-17 12:46
hilinw 写道
来顶温少同学。
温少是java方面的高手,是我们学习的榜样,kdbc,sasa框架,是一个很好的程序员和架构师。
不知道这个项目,是不是把Xdbc也开源了?


我在金蝶期间,其中一个项目是“KSQL多数据库支持”,积累了JDBC和Parser相关经验。

但是,Druid和KSQL没关系,代码完全重写,代码结构完全不一样,功能也完全不一样。

金蝶研发中心的网络是封闭的,不存在重复利用代码的可能。
30 楼 hilinw 2012-07-17 12:36
来顶温少同学。
温少是java方面的高手,是我们学习的榜样,kdbc,sasa框架,是一个很好的程序员和架构师。
不知道这个项目,是不是把Xdbc也开源了?
29 楼 meifangzi 2012-07-17 11:37
温少爷太牛逼了 佩服!
28 楼 jyjava 2012-07-17 10:50
我们公司也有个监控系统,不过他都是现在代码里面的用的是Monitor,不过我们不是用的过滤器,而且我们还包括对bean的监控,了解Druid是不是可以进阿里啊,呵呵,lz感兴趣的话,可以聊聊,
27 楼 z466459262 2012-07-17 10:26
我天天都能看到温少。。。。真是太崇拜你了。。
26 楼 wenshao 2012-07-17 10:24
nutz框架使用druid的demo : https://github.com/nutzam/nutzdemo/tree/master/demo/nutz2druid
25 楼 belliedmonkey 2012-07-17 09:50
专门来顶温少的, 温少不仅自己技术牛逼,还能推动团队,推动社区一起进步,太酷了!
24 楼 wenshao 2012-07-17 08:35
Druid有1538个TestCase,每次发布前都会做回归测试。
23 楼 cwocwo 2012-07-17 08:35
在项目上用了, 感觉不错, 推荐
22 楼 zgjzc 2012-07-16 22:51
支持,不错的想法,用过fastjson,很给力。近期在做一些复杂匹配的业务逻辑有想实现一个sql parser,刚好碰上weshao发福利,万分感谢!
21 楼 wenshao 2012-07-16 20:41
Properties properties = new Properties();
properties.put("maxActive", "100");
properties.put("maxIdle", "30");
properties.put("maxWait", "10000");
properties.put("url", "jdbc:mock:");
properties.put("filters", "stat");
properties.put("validationQuery", "SELECT 1");
DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);


直接用Property作为参数传入不也是一样的么?

yunnysunny 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。

很显然用property更方便
 try {        	
            
            InputStream input = new FileInputStream(configPath);
            if (input != null) {
            	p.load(input);
            	        	
	        	System.out.println("driverClassName is " + p.getProperty("driverClassName"));
	        	logger.info(p.getProperty("url"));
	        	logger.info(p.getProperty("username"));
	            dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
            } else {
            	logger.fatal("获取数据库配置文件失败.");
            }

        } catch (Exception e) {            
        	logger.fatal("初始化数据库失败:", e);        	
        }

另外问一下,Druid有没有网络断线重新初始化datasource的功能。
20 楼 yunnysunny 2012-07-16 20:36
yunnysunny 写道
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。

很显然用property更方便
 try {        	
            
            InputStream input = new FileInputStream(configPath);
            if (input != null) {
            	p.load(input);
            	        	
	        	System.out.println("driverClassName is " + p.getProperty("driverClassName"));
	        	logger.info(p.getProperty("url"));
	        	logger.info(p.getProperty("username"));
	            dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
            } else {
            	logger.fatal("获取数据库配置文件失败.");
            }

        } catch (Exception e) {            
        	logger.fatal("初始化数据库失败:", e);        	
        }

另外问一下,Druid有没有网络断线重新初始化datasource的功能。
19 楼 wenshao 2012-07-16 20:32
Property也是Map啊,可以直接作为参数传入

yunnysunny 写道
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。

18 楼 yunnysunny 2012-07-16 20:30
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。
17 楼 wenshao 2012-07-16 20:18
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)
16 楼 yunnysunny 2012-07-16 20:10
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。
15 楼 wenshao 2012-07-16 20:04
magic4u 写道
最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。


阿里巴巴的大规模布署之后还不够么?  你能够找到比Druid更好的数据库连接池么?
14 楼 wenshao 2012-07-16 20:02
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java
13 楼 yunnysunny 2012-07-16 19:27
只能用spring配置连接参数吗?
12 楼 magic4u 2012-07-16 18:15
最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。
11 楼 cutesunshineriver 2012-07-16 17:31
代码写得很好,能不能考虑加上中文注释。
10 楼 xjb19880523 2012-07-16 15:21
我这里 前几天 也是刚换用的这个之前在用dbcp 主要用的还是连接池的功能  效果不错
9 楼 youjianbo_han_87 2012-07-16 14:21
一直在关注这个项目。。。
8 楼 wenshao 2012-07-16 13:02
supercwg 写道
提供监控页面?能否提供一个可部署的java工程的?


这里有我fork springside4做的监控页面示例,https://github.com/wenshao/springside4。修改的内容在这两个commit中:
https://github.com/wenshao/springside4/commit/f261996b9ce2f5cccc38dfb8534afe47f17df821

https://github.com/wenshao/springside4/commit/6caa7a17b27e8e8225b540230331995a8056f939

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • (转载)阿里巴巴开源项目 Druid 负责人温少访谈

    http://www.iteye.com/magazines/90?page=2#111

  • 鸡国大冒险运行程序,点开即用

  • 基于Python+Flask的安全多方计算的隐私保护系统设计与实现+全部资料齐全+部署文档.zip

    【资源说明】 基于Python+Flask的安全多方计算的隐私保护系统设计与实现+全部资料齐全+部署文档.zip基于Python+Flask的安全多方计算的隐私保护系统设计与实现+全部资料齐全+部署文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 聊天系统(java+applet).zip

    聊天系统(java+applet)

  • setuptools-11.0-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip

    基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip

  • setuptools-1.3.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • setuptools-40.3.0-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 公开整理-各省碳排放数据集(1990-2022年).xlsx

    详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/138872006

  • 基于Java的两个通用安全模块的设计与实现.zip

    基于Java的两个通用安全模块的设计与实现

  • setuptools-14.1.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 华为-智慧园区数字平台技术qytp.pptx

    华为-智慧园区数字平台技术qytp.pptx

  • 30个Python游戏源码

    30个Python游戏源码

  • 基于python深度度量学习准确预测蛋白质二级结构源码.zip

    基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip基于python深度度量学习准确预测蛋白质二级结构源码.zip

  • 基于单片机的语音存储与重放系统.zip

    基于单片机的系统

  • Java项目之jspm房屋租赁系统(源码 + 说明文档)

    Java项目之jspm房屋租赁系统(源码 + 说明文档) 2开发技术介绍 6 2.1B/S架构 6 2.2Java技术 6 2.3MySQL介绍 6 2.4MySQL环境配置 7 2.5JSP技术介绍 7 3系统分析 8 3.1可行性分析 8 3.1.1技术可行性 8 3.1.2经济可行性 8 3.1.3操作可行性 8 3.1.4运行可行性 9 3.2系统性能需求分析 9 3.3系统功能分析 9 3.4系统流程的分析 10 3.4.1用户管理的流程 11 3.4.2个人中心管理流程 12 3.4.3登录流程 12 4系统设计 13 4.1软件功能模块设计 13 4.2数据库设计与实现 13 4.2.1概念模型设计 13 4.2.2物理模型设计 15 5系统详细设计 22 5.1系统功能模块 22 5.2管理员功能模块 23 5.3租客功能模块 27 6系统测试 28 7总结与心得体会 29 7.1总结 29 7.2心得体会 29

  • 小红书-课程网盘链接提取码下载 (2).txt

    小红书-课程网盘链接提取码下载 (2).txt

  • setuptools-24.1.1.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • c-master (2).zip

    c语言

Global site tag (gtag.js) - Google Analytics