一、数据源的由来

  在Java开发中,使用JDBC操作数据库的四个步骤如下:

      ①加载数据库驱动程序(Class.forName("数据库驱动类");)
      ②连接数据库(Connection con  = DriverManager.getConnection();)
      ③操作数据库(PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)
      ④关闭数据库,释放连接(con.close();)
  也就是说,所有的用户都需要经过此四步进行操作,但是这四步之中有三步(①加载数据库驱动程序、②连接数据库、④关闭数据库,释放连接)对所有人都是一样的,而所有人只有在操作数据库上是不一样,那么这就造成了性能的损耗。
  那么最好的做法是,准备出一个空间,此空间里专门保存着全部的数据库连接,以后用户用数据库操作的时候不用再重新加载驱动、连接数据库之类的,而直接从此空间中取走连接,关闭的时候直接把连接放回到此空间之中。
  那么此空间就可以称为连接池(保存所有的数据库连接),但是如果要想实现此空间的话,则必须有一个问题要考虑?
      1、 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用。
      2、 如果连接已经满了,则必须打开新的连接,供更多用户使用。
      3、 如果一个服务器就只能有100个连接,那么如果有第101个人过来呢?应该等待其他用户释放连接
      4、 如果一个用户等待时间太长了,则应该告诉用户,操作是失败的。
   如果直接用程序实现以上功能,则会比较麻烦,所以在Tomcat 4.1.27之后,在服务器上就直接增加了数据源的配置选项,直接在服务器上配置好数据源连接池即可。在J2EE服务器上保存着一个数据库的多个连接。每一个连接通过DataSource可以找到。DataSource被绑定在了JNDI树上(为每一个DataSource提供一个名字)客户端通过名称找到在JNDI树上绑定的DataSource,再由DataSource找到一个连接。如下图所示:
那么在以后的操作中,除了数据库的连接方式不一样之外,其他的所有操作都一样,只是关闭的时候不是彻底地关闭数据库,而是把数据库的连接放回到连接池中去。
  如果要想使用数据源的配置,则必须配置虚拟目录,因为此配置是在虚拟目录之上起作用的。需要注意的是,如果要想完成以上的功能,在Tomcat服务器上一定要有各个数据库的驱动程序。

二、JNDI+Tomcat配置数据源的两种方式

2.1、全局jndi配置

  此种配置需要在server.xml中配置数据源,具体的配置步骤如下:

  1、在tomcat服务器的lib目录下加入数据库连接的驱动jar包

  

  2、修改tomcat服务器的conf目录下server.xml配置文件

  

  打开server.xml配置文件,可以看到里面自带的一个全局JNDI配置,如下图所示:

  

  编辑server.xml文件,添加全局JNDI数据源配置,配置如下:

1 <!-- Global JNDI resources
2 Documentation at /docs/jndi-resources-howto.html
3 -->
4 <GlobalNamingResources>
5 <!-- Editable user database that can also be used by
6 UserDatabaseRealm to authenticate users
7 -->
8 <Resource name="UserDatabase" auth="Container"
9 type="org.apache.catalina.UserDatabase"
10 description="User database that can be updated and saved"
11 factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
12 pathname="conf/tomcat-users.xml" />
13 <!--
14 |- name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
15 为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。
16 |- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
17 |- type:此名称所代表的类型,现在为javax.sql.DataSource
18 |- maxActive:表示一个数据库在此服务器上所能打开的最大连接数
19 |- maxIdle:表示一个数据库在此服务器上维持的最小连接数
20 |- maxWait:最大等待时间。10000毫秒
21 |- username:数据库连接的用户名
22 |- password:数据库连接的密码
23 |- driverClassName:数据库连接的驱动程序
24 |- url:数据库连接的地址
25 -->
26 <!--配置Oracle数据库的JNDI数据源-->
27 <Resource
28 name="jdbc/oracle"
29 auth="Container"
30 type="javax.sql.DataSource"
31 maxActive="100"
32 maxIdle="30"
33 maxWait="10000"
34 username="lead_oams"
35 password="p"
36 driverClassName="oracle.jdbc.driver.OracleDriver"
37 url="jdbc:oracle:thin:@192.168.1.229:1521:lead"/>
38
39 <!--配置MySQL数据库的JNDI数据源-->
40 <Resource
41 name="jdbc/mysql"
42 auth="Container"
43 type="javax.sql.DataSource"
44 maxActive="100"
45 maxIdle="30"
46 maxWait="10000"
47 username="root"
48 password="root"
49 driverClassName="com.mysql.jdbc.Driver"
50 url="jdbc:mysql://192.168.1.144:3306/leadtest?useUnicode=true&amp;characterEncoding=utf-8"/>
51
52 <!--配置SQLServer数据库的JNDI数据源-->
53 <Resource
54 name="jdbc/sqlserver"
55 auth="Container"
56 type="javax.sql.DataSource"
57 maxActive="100"
58 maxIdle="30"
59 maxWait="10000"
60 username="sa"
61 password="p@ssw0rd"
62 driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
63 url="jdbc:sqlserver://192.168.1.51:1433;DatabaseName=demo"/>
64
65 </GlobalNamingResources>

经过以上的两个步骤,全局JNDI数据源就配置好了,在上述的server.xml文件中,分别配置了Oracle、MySQL、SQLServer这三种数据库的全局JNDI数据源。

2.2、全局jndi数据源测试

  1、创建一个JNDI测试项目JNDITest,在web.xml中添加JNDI配置的资源引用

  

  web.xml的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
7 <welcome-file-list>
8 <welcome-file>index.jsp</welcome-file>
9 </welcome-file-list>
10
11 <!--
12 JNDI配置的资源引用:
13 • res-ref-name:表示引用资源的名称
14 • res-type:此资源对应的类型为javax.sql.DataSource
15 • res-auth:容器授权管理
16 -->
17 <!--Oracle数据库JNDI数据源引用 -->
18 <resource-ref>
19 <description>Oracle DB Connection</description>
20 <res-ref-name>oracleDataSource</res-ref-name>
21 <res-type>javax.sql.DataSource</res-type>
22 <res-auth>Container</res-auth>
23 </resource-ref>
24
25 <!--MySQL数据库JNDI数据源引用 -->
26 <resource-ref>
27 <description>MySQL DB Connection</description>
28 <res-ref-name>mysqlDataSource</res-ref-name>
29 <res-type>javax.sql.DataSource</res-type>
30 <res-auth>Container</res-auth>
31 </resource-ref>
32
33 <!--SQLServer数据库JNDI数据源引用 -->
34 <resource-ref>
35 <description>SQLServer DB Connection</description>
36 <res-ref-name>sqlserverDataSource</res-ref-name>
37 <res-type>javax.sql.DataSource</res-type>
38 <res-auth>Container</res-auth>
39 </resource-ref>
40
41 </web-app>

2、映射JNDITest项目的虚拟目录

  在tomcat的\conf\Catalina\localhost下(没有目录就新建)创建一个xml文件,文件名必须和项目名相同,测试JNDI数据源的web项目的项目名称是:JNDITest,所以xml文件的命名就叫JNDITest.xml,如下图所示:

  

  编辑JNDITest.xml,配置如下:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 jndi配置方法(tomcat):
4 将此文件放置在tomcat\conf\Catalina\localhost下(没有目录就新建)
5 -->
6 <!--映射JNDITest项目的虚拟目录-->
7 <Context docBase="D:/MyEclipse8.5/workspace/JNDITest/WebRoot" debug="0" reloadable="false">
8 <!--引用Oracle数据库的JNDI数据源-->
9 <ResourceLink name="oracleDataSource" global="jdbc/oracle" type="javax.sql.DataSource"/>
10 <!--引用mysql数据库的JNDI数据源-->
11 <ResourceLink name="mysqlDataSource" global="jdbc/mysql" type="javax.sql.DataSource"/>
12 <!--引用sqlserver数据库的JNDI数据源-->
13 <ResourceLink name="sqlserverDataSource" global="jdbc/sqlserver" type="javax.sql.DataSource"/>
14 </Context>

3、测试从JNDI数据源获取数据库连接

  配置完数据源连接池之后,就可以按照以下的步骤进行访问:

    • 初始化名称查找上下文
    • 通过JNDI名称找到DataSource
    • 通过DataSource取得一个连接
    • 操作数据库
    • 关闭数据库,关闭的时候是将连接放回到连接池之中

  jsp测试页面代码如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
3
4 <!DOCTYPE HTML>
5 <html>
6 <head>
7 <title>JNDI数据源测试</title>
8 </head>
9
10 <body>
11 <%
12 Connection connOracle = null;
13 try {
14 //1、初始化名称查找上下文
15 Context ctx = new InitialContext();
16 //InitialContext ctx = new InitialContext();亦可
17 //2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟的是DataSource名
18 /*
19 DataSource名在web.xml文件中的<res-ref-name>oracleDataSource</res-ref-name>进行了配置
20 <!--Oracle数据库JNDI数据源引用 -->
21 <resource-ref>
22 <description>Oracle DB Connection</description>
23 <res-ref-name>oracleDataSource</res-ref-name>
24 <res-type>javax.sql.DataSource</res-type>
25 <res-auth>Container</res-auth>
26 </resource-ref>
27 */
28 DataSource ds = (DataSource)ctx.lookup("java:comp/env/oracleDataSource");
29 //3、通过DataSource取得一个连接
30 connOracle = ds.getConnection();
31 out.println("Oracle Connection pool connected !!");
32 //4、操作数据库
33 } catch (NamingException e) {
34 System.out.println(e.getMessage());
35 } catch (SQLException e) {
36 e.printStackTrace();
37 } finally {
38 //5、关闭数据库,关闭的时候是将连接放回到连接池之中
39 connOracle.close();
40 }
41 %>
42 <hr/>
43 <%
44 Connection connMySQL = null;
45 try {
46 //1、初始化名称查找上下文
47 Context ctx = new InitialContext();
48 //InitialContext ctx = new InitialContext();亦可
49 //2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟的是DataSource名
50 /*
51 DataSource名在web.xml文件中的<res-ref-name>mysqlDataSource</res-ref-name>进行了配置
52 <!--MySQL数据库JNDI数据源引用 -->
53 <resource-ref>
54 <description>MySQL DB Connection</description>
55 <res-ref-name>mysqlDataSource</res-ref-name>
56 <res-type>javax.sql.DataSource</res-type>
57 <res-auth>Container</res-auth>
58 </resource-ref>
59 */
60 DataSource ds = (DataSource)ctx.lookup("java:comp/env/mysqlDataSource");
61 //3、通过DataSource取得一个连接
62 connMySQL = ds.getConnection();
63 out.println("MySQL Connection pool connected !!");
64 //4、操作数据库
65 } catch (NamingException e) {
66 System.out.println(e.getMessage());
67 } catch (SQLException e) {
68 e.printStackTrace();
69 } finally {
70 //5、关闭数据库,关闭的时候是将连接放回到连接池之中
71 connMySQL.close();
72 }
73 %>
74 <hr/>
75 <%
76 Connection connSQLServer = null;
77 try {
78 //1、初始化名称查找上下文
79 Context ctx = new InitialContext();
80 //InitialContext ctx = new InitialContext();亦可
81 //2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面的是DataSource名
82 /*
83 DataSource名在web.xml文件中的<res-ref-name>sqlserverDataSource</res-ref-name>进行了配置
84 <!--SQLServer数据库JNDI数据源引用 -->
85 <resource-ref>
86 <description>SQLServer DB Connection</description>
87 <res-ref-name>sqlserverDataSource</res-ref-name>
88 <res-type>javax.sql.DataSource</res-type>
89 <res-auth>Container</res-auth>
90 </resource-ref>
91 */
92 DataSource ds = (DataSource)ctx.lookup("java:comp/env/sqlserverDataSource");
93 //3、通过DataSource取得一个连接
94 connSQLServer = ds.getConnection();
95 out.println("SQLServer Connection pool connected !!");
96 //4、操作数据库
97 } catch (NamingException e) {
98 System.out.println(e.getMessage());
99 } catch (SQLException e) {
100 e.printStackTrace();
101 } finally {
102 //5、关闭数据库,关闭的时候是将连接放回到连接池之中
103 connSQLServer.close();
104 }
105 %>
106 </body>
107 </html>

运行结果如下:

  

  除了可以在Jsp页面中编写java代码测试JNDI数据源连接之外,还有一种比较简单的方式就是使用JSTL标签库提供的sql标签进行测试,测试代码如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%--引入JSTL标签库 --%>
3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4 <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
5 <!DOCTYPE HTML>
6 <html>
7 <head>
8 <title>JNDI数据源连接测试</title>
9 </head>
10
11 <body>
12 <h3>Oracle JNDI数据源测试</h3>
13 <%--使用sql:query标签发送SQL语句去数据库查询数据,查询的结果集保存到rs变量当中,dataSource属性指明使用的数据源--%>
14 <sql:query var="rs" dataSource="oracleDataSource">
15 <%--Oracle JNDI数据源测试 SQL--%>
16 SELECT * FROM LEAD_OAMS_DBSOURCES
17 </sql:query>
18 <%--使用c:forEach标签遍历查询结果集rs中的每一行--%>
19 <c:forEach var="row" items="${rs.rows}">
20 <%--${row.字段名}获取字段的值--%>
21 ${row.RESOURCEID}---${row.DBSOURCE_NAME}---${row.DBSOURCE_TYPE}<br/>
22 </c:forEach>
23 <hr/>
24 <h3>MySQL JNDI数据源测试</h3>
25 <%--使用sql:query标签发送SQL语句去数据库查询数据,查询的结果集保存到rs变量当中,dataSource属性指明使用的数据源--%>
26 <sql:query var="rs" dataSource="mysqlDataSource">
27 <%--MySQL JNDI数据源测试 SQL--%>
28 select * from ld_user
29 </sql:query>
30 <%--使用c:forEach标签遍历查询结果集rs中的每一行--%>
31 <c:forEach var="row" items="${rs.rows}">
32 <%--${row.字段名}获取字段的值--%>
33 ${row.id}---${row.username}---${row.password}<br/>
34 </c:forEach>
35 <hr/>
36 <h3>SQLServer JNDI数据源测试</h3>
37 <%--使用sql:query标签发送SQL语句去数据库查询数据,查询的结果集保存到rs变量当中,dataSource属性指明使用的数据源--%>
38 <sql:query var="rs" dataSource="sqlserverDataSource">
39 <%--SQLServer JNDI数据源测试 SQL--%>
40 select * from t_demo
41 </sql:query>
42 <%--使用c:forEach标签遍历查询结果集rs中的每一行--%>
43 <c:forEach var="row" items="${rs.rows}">
44 <%--${row.字段名}获取字段的值--%>
45 ${row.id}---${row.time}<br/>
46 </c:forEach>
47 </body>
48 </html>

 运行结果如下:

  

2.3、非全局jndi配置

  非全局JNDI数据源是针对某一个Web项目配置的数据源,具体的配置步骤如下:

  1、在tomcat服务器的lib目录下加入数据库连接的驱动jar包

   2、针对具体的web项目映射虚拟目录,然后在虚拟目录映射的配置文件中配置JNDI数据源

  还是以上面的JNDITest项目为例子进行说明

  在tomcat目录下的\conf\Catalina\localhost目录下创建一个JNDITest.xml文件,如下图所示:

  

  编辑JNDITest.xml文件,添加对JNDITest项目的虚拟目录的映射和JNDI数据源的配置

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 jndi配置方法(tomcat):
4 将此文件放置在tomcat\conf\Catalina\localhost下(没有目录就新建)
5 -->
6
7 <Context docBase="D:/MyEclipse8.5/workspace/JNDITest/WebRoot" debug="0" reloadable="false">
8 <!--
9 |- name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
10 为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。
11 |- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
12 |- type:此名称所代表的类型,现在为javax.sql.DataSource
13 |- maxActive:表示一个数据库在此服务器上所能打开的最大连接数
14 |- maxIdle:表示一个数据库在此服务器上维持的最小连接数
15 |- maxWait:最大等待时间。10000毫秒
16 |- username:数据库连接的用户名
17 |- password:数据库连接的密码
18 |- driverClassName:数据库连接的驱动程序
19 |- url:数据库连接的地址
20 -->
21 <!--配置Oracle数据库的JNDI数据源-->
22 <Resource
23 name="oracleDataSource"
24 auth="Container"
25 type="javax.sql.DataSource"
26 maxActive="100"
27 maxIdle="30"
28 maxWait="10000"
29 username="lead_oams"
30 password="p"
31 driverClassName="oracle.jdbc.driver.OracleDriver"
32 url="jdbc:oracle:thin:@192.168.1.229:1521:lead"/>
33
34 <!--配置MySQL数据库的JNDI数据源-->
35 <Resource
36 name="mysqlDataSource"
37 auth="Container"
38 type="javax.sql.DataSource"
39 maxActive="100"
40 maxIdle="30"
41 maxWait="10000"
42 username="root"
43 password="root"
44 driverClassName="com.mysql.jdbc.Driver"
45 url="jdbc:mysql://192.168.1.144:3306/leadtest?useUnicode=true&amp;characterEncoding=utf-8"/>
46
47 <!--配置SQLServer数据库的JNDI数据源-->
48 <Resource
49 name="sqlserverDataSource"
50 auth="Container"
51 type="javax.sql.DataSource"
52 maxActive="100"
53 maxIdle="30"
54 maxWait="10000"
55 username="sa"
56 password="p@ssw0rd"
57 driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
58 url="jdbc:sqlserver://192.168.1.51:1433;DatabaseName=demo"/>
59 </Context>

3、在web项目的web.xml文件中引用配置好的JNDI数据源

1  <!--
2 JNDI配置的资源引用:
3 • res-ref-name:表示引用资源的名称
4 • res-type:此资源对应的类型为javax.sql.DataSource
5 • res-auth:容器授权管理
6 -->
7 <!--Oracle数据库JNDI数据源引用 -->
8 <resource-ref>
9 <description>Oracle DB Connection</description>
10 <res-ref-name>oracleDataSource</res-ref-name>
11 <res-type>javax.sql.DataSource</res-type>
12 <res-auth>Container</res-auth>
13 </resource-ref>
14
15 <!--MySQL数据库JNDI数据源引用 -->
16 <resource-ref>
17 <description>MySQL DB Connection</description>
18 <res-ref-name>mysqlDataSource</res-ref-name>
19 <res-type>javax.sql.DataSource</res-type>
20 <res-auth>Container</res-auth>
21 </resource-ref>
22
23 <!--SQLServer数据库JNDI数据源引用 -->
24 <resource-ref>
25 <description>SQLServer DB Connection</description>
26 <res-ref-name>sqlserverDataSource</res-ref-name>
27 <res-type>javax.sql.DataSource</res-type>
28 <res-auth>Container</res-auth>
29 </resource-ref>

经过以上3个步骤,针对具体web项目配置的JNDI数据源就算是配置好了。具体的测试和上述测试全局JNDI数据源的方式是一样的!

啦啦啦

啦啦啦

JNDI数据源的配置的更多相关文章

  1. JNDI数据源局部配置(解决Cannot create JDBC driver of class '' for connect URL 'null')

    最开始,我是借鉴 孤傲苍狼的JNDI教程去做的,他讲得很详细,但是坏处也就是因为他讲的太详细.查了很多书,都是建议说不要用全局去配置JNDI,一是要修改tomcat的server.xml,容易破坏to ...

  2. JNDI学习总结(一)——JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...

  3. JNDI学习总结(一)——JNDI数据源的配置(转)

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Conn ...

  4. JNDI学习总结(2)——JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)    ②连接数据库(Con ...

  5. JNDI学习总结(一)——JNDI数据源的配置

    原文地址:http://www.cnblogs.com/xdp-gacl/p/3951952.html 一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动 ...

  6. JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼

    JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼ 标签: 杂谈 分类: 数据库 数据源的作用 JDBC操作的步骤: 1. 加载驱动程序 2. 连接数据库 3. 操作数据库 ...

  7. JNDI数据源的配置及使用

    数据源的作用JDBC操作的步骤:  1. 加载驱动程序  2. 连接数据库  3. 操作数据库  4. 关闭数据库,释放连接 也就是说,所有的用户都需要经过此四步进行操作,但是这四步之中有三步对所有人 ...

  8. JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

  9. Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

随机推荐

  1. asp.net缓存 (转)

    原文地址 http://www.cnblogs.com/knowledgesea/archive/2012/07/10/2530436.html 谢谢 一.缓存概念,缓存的好处.类型.         ...

  2. C语言中字符输入问题

    先上例题,一道太水太水的题, http://acm.hdu.edu.cn/showproblem.php?pid=1170 让做一个简单的计算器.然而入坑了. #include<stdio.h& ...

  3. vue事件对象、冒泡、阻止默认行为

    事件对象: <input type="button" name="" value="按钮" @click="show($ev ...

  4. Android的Databinding-资源绑定

    databinding还能对布局的资源文件进行绑定. <data class="ResourceBinding"> <variable name="la ...

  5. [DevExpress使用随笔]之NavBarControl控件(一)【转】

    https://blog.csdn.net/HXC_HUANG/article/details/78614092 NavBarControl是具有可扩展组的侧导航控件.一.在Winform窗口中拖入N ...

  6. webpack Import 动态文件

    其实React Import scss 是非常简单的,比如一般写法import './PromotionPage.scss';,今天遇到一个样式需要覆盖,那么修改后的代码变成了: import './ ...

  7. MYSQL常用的性能指标总结和归纳

    (1) QPS(每秒Query量)QPS = Questions(or Queries) / uptimemysql> show global status like 'Question%';m ...

  8. [Javascript] Multiply Two Arrays over a Function in JavaScript

    Just like the State ADT an Array is also an Applicative Functor. That means we can do the same trick ...

  9. Visual Studio 2017 扩展

    Visual Studio 2017 扩展 Visual Studio 2017 15.4.4 : 目前是最新的版本号,所有的工具&插件都支持这个版本号.所以请对号入座. ReSharper  ...

  10. 使用rsync

    rsync是linux下同步文件的一个高效算法,用于同步更新两处计算机的文件和目录,并适当利用查找文件中的不同块以减少数据传输.rsync的主要特点就是增量传输,只对变更的部分进行传送. 增量同步算法 ...