數(shù)據(jù)源程序庫(kù)可行性替換研究

      網(wǎng)友投稿 900 2025-04-05

      【引言】


      數(shù)據(jù)源程序庫(kù)可行性替換研究

      最近收到一個(gè)調(diào)研需求,是關(guān)于JNDI綁定數(shù)據(jù)源程序庫(kù)可行性替換研究,目前我們需要替換的程序庫(kù)名稱(chēng)是c3p0。本文我們就來(lái)探索一下這個(gè)問(wèn)題。

      【C3P0】

      c3p0是一個(gè)易于使用的,用于JNDI綁定數(shù)據(jù)源來(lái)增強(qiáng)傳統(tǒng)的JDBC驅(qū)動(dòng)的程序庫(kù),它包括實(shí)現(xiàn)jdbc3規(guī)范和jdbc2?標(biāo)準(zhǔn)擴(kuò)展所描述的連接和語(yǔ)句集合的數(shù)據(jù)源。

      它是一個(gè)成熟的、高度并發(fā)的JDBC連接池庫(kù),支持緩存和重用PreparedStatements。

      它使用LGPL v.2.1?或?EPL v.1.0授權(quán)的方式。

      【官方網(wǎng)站】

      https://www.mchange.com/projects/c3p0/

      【License】

      LGPL v2.1?或EPL v1.0

      【最新發(fā)布】

      0.9.5.5?于?2019年12月

      【功能列表】

      c3p0通過(guò)對(duì)傳統(tǒng)的JDBC驅(qū)動(dòng)進(jìn)行?"企業(yè)級(jí)?"的擴(kuò)展,使其具備jdbc3規(guī)范和jdbc2的可選擴(kuò)展功能。

      從0.9.5版本開(kāi)始,c3p0完全支持jdbc4規(guī)范。

      特別是,c3p0提供了幾個(gè)有用的服務(wù):

      l??通過(guò)一個(gè)類(lèi)將傳統(tǒng)的基于DriverManager的JDBC驅(qū)動(dòng)適配到最新的javax.sql.DataSource方案中,用來(lái)獲取數(shù)據(jù)庫(kù)連接。

      l??把DataSources背后的Connection和PreparedStatements透明池化,這里的DataSources可以?"包裹"傳統(tǒng)驅(qū)動(dòng)或任意的非池化的DataSources。

      該庫(kù)的細(xì)節(jié)處理:

      l??c3p0 DataSources既是可引用的,也是可序列化的,因此適合于綁定到各種基于JNDI的命名服務(wù)。

      l??當(dāng)池化的鏈接和Statements在進(jìn)行檢入時(shí),?Statement和ResultSets被仔細(xì)清理,以防止客戶(hù)端使用惰性時(shí)可能引起的資源枯竭。

      l??該庫(kù)采用了JDBC 2和3規(guī)范。DataSources是以JavaBean風(fēng)格編寫(xiě)的,提供了必要的和大部分可選的屬性,并且沒(méi)有參數(shù)構(gòu)造函數(shù)。?所有JDBC定義的內(nèi)部接口都已實(shí),如ConnectionPoolDataSource、PooledConnection、ConnectionEvent-generating Connections等。

      【使用示例】

      配置1

      ComboPooledDataSource?cpds?=?new?ComboPooledDataSource();

      cpds.setDriverClass(?"org.postgresql.Driver"?);?//loads?the?jdbc?driver

      cpds.setJdbcUrl(?"jdbc:postgresql://localhost/testdb"?);

      cpds.setUser("dbuser");

      cpds.setPassword("dbpassword");

      配置2

      DataSource?ds_unpooled?=?DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb",

      "swaldman",

      "test-password");

      DataSource?ds_pooled?=?DataSources.pooledDataSource(?ds_unpooled?);

      更多配置可以參看官方網(wǎng)站。

      【HikariCP】

      HikariCP是一個(gè)堅(jiān)實(shí)的、高性能的JDBC連接池。

      它的特點(diǎn)是快速、簡(jiǎn)單、可靠。

      HikariCP是一個(gè)?"零開(kāi)銷(xiāo)"的生產(chǎn)型JDBC連接庫(kù)。大約130Kb,是個(gè)非常輕的程序庫(kù)。

      【官方網(wǎng)站】

      https://github.com/brettwooldridge/HikariCP

      【License】

      Apache 2.0

      【最新發(fā)布】

      3.4.5?于?2020年5月4日

      【功能列表】

      HikariCP依賴(lài)于精確的定時(shí)器來(lái)提高性能和保證可靠性。

      l??您的服務(wù)器必須與時(shí)間源同步,如NTP服務(wù)器等。

      l??特別是如果你的服務(wù)器是在虛擬機(jī)中運(yùn)行的時(shí)候,不要依賴(lài)hypervisor設(shè)置來(lái)?"同步"虛擬機(jī)的時(shí)鐘,而要在虛擬機(jī)內(nèi)部配置時(shí)間源同步。

      HikariCP自帶了合理的默認(rèn)值,在大多數(shù)部署中表現(xiàn)良好,無(wú)需額外調(diào)整。除了下面標(biāo)注的?"必需項(xiàng)"之外,其他屬性都是可選的。

      必選項(xiàng)

      以下的dataSourceClassName和jdbcUrl任選其一即可。

      這是JDBC驅(qū)動(dòng)提供的DataSource類(lèi)的名稱(chēng)。請(qǐng)參考您的特定JDBC驅(qū)動(dòng)程序的文檔來(lái)獲取這個(gè)類(lèi)的名稱(chēng),或查看下面的表格。

      數(shù)據(jù)庫(kù)

      驅(qū)動(dòng)

      DataSource?類(lèi)

      Apache Derby

      Derby

      org.apache.derby.jdbc.ClientDataSource

      Firebird

      Jaybird

      org.firebirdsql.ds.FBSimpleDataSource

      H2

      H2

      org.h2.jdbcx.JdbcDataSource

      HSQLDB

      HSQLDB

      org.hsqldb.jdbc.JDBCDataSource

      IBM DB2

      IBM JCC

      com.ibm.db2.jcc.DB2SimpleDataSource

      IBM Informix

      IBM Informix

      com.informix.jdbcx.IfxDataSource

      MS SQL Server

      Microsoft

      com.microsoft.sqlserver.jdbc.SQLServerDataSource

      MariaDB

      MariaDB

      org.mariadb.jdbc.MariaDbDataSource

      Oracle

      Oracle

      oracle.jdbc.pool.OracleDataSource

      OrientDB

      OrientDB

      com.orientechnologies.orient.jdbc.OrientDataSource

      PostgreSQL

      pgjdbc-ng

      com.impossibl.postgres.jdbc.PGDataSource

      PostgreSQL

      PostgreSQL

      org.postgresql.ds.PGSimpleDataSource

      SAP MaxDB

      SAP

      com.sap.dbtech.jdbc.DriverSapDB

      SQLite

      xerial

      org.sqlite.SQLiteDataSource

      SyBase

      jConnect

      com.sybase.jdbc4.jdbc.SybDataSource

      對(duì)于MySQL,目前只有jdbcUrl方式可用。

      這個(gè)屬性指示HikariCP使用?"基于驅(qū)動(dòng)程序管理器"的配置。當(dāng)使用該屬性與?"舊"驅(qū)動(dòng)時(shí),你可能還需要設(shè)置driverClassName屬性,但先嘗試不使用該屬性。請(qǐng)注意,如果使用了這個(gè)屬性,您仍然可以使用DataSource屬性來(lái)配置您的驅(qū)動(dòng)程序,事實(shí)上,建議您使用DataSource屬性而不是在URL本身指定的驅(qū)動(dòng)程序參數(shù)。

      另外的兩個(gè)必選項(xiàng)是username和password。

      其他的更多選項(xiàng),可以參看官方網(wǎng)站。

      【使用示例】

      Maven?安裝

      com.zaxxer

      HikariCP

      3.4.5

      配置1:

      HikariConfig?config?=?new?HikariConfig();

      config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");

      config.setUsername("bart");

      config.setPassword("51mp50n");

      config.addDataSourceProperty("cachePrepStmts",?"true");

      config.addDataSourceProperty("prepStmtCacheSize",?"250");

      config.addDataSourceProperty("prepStmtCacheSqlLimit",?"2048");

      HikariDataSource?ds?=?new?HikariDataSource(config);

      配置2:

      HikariDataSource?ds?=?new?HikariDataSource();

      ds.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");

      ds.setUsername("bart");

      ds.setPassword("51mp50n");

      ...

      配置3:

      屬性值:

      dataSourceClassName=org.postgresql.ds.PGSimpleDataSource

      dataSource.user=test

      dataSource.password=test

      dataSource.databaseName=mydb

      dataSource.portNumber=5432

      dataSource.serverName=localhost

      HikariConfig?config?=?new?HikariConfig("/some/path/hikari.properties");

      HikariDataSource?ds?=?new?HikariDataSource(config);

      配置4:

      Properties?props?=?new?Properties();

      props.setProperty("dataSourceClassName",?"org.postgresql.ds.PGSimpleDataSource");

      props.setProperty("dataSource.user",?"test");

      props.setProperty("dataSource.password",?"test");

      props.setProperty("dataSource.databaseName",?"mydb");

      props.put("dataSource.logWriter",?new?PrintWriter(System.out));

      HikariConfig?config?=?new?HikariConfig(props);

      HikariDataSource?ds?=?new?HikariDataSource(config);

      【性能對(duì)比】

      以下是JDBC連接池的JHM基準(zhǔn)測(cè)試結(jié)果。

      更多詳情可以參看其官方網(wǎng)站:

      https://github.com/brettwooldridge/HikariCP-benchmark

      【小結(jié)】

      本文對(duì)數(shù)據(jù)源程序庫(kù)做了替換可行性的研究,目前對(duì)于替換C3P0程序庫(kù)來(lái)說(shuō),比較好的選項(xiàng)是HikariCP。

      希望本文對(duì)業(yè)務(wù)開(kāi)發(fā)有指導(dǎo)作用,?并對(duì)大家有所裨益。

      歡迎討論。

      軟件開(kāi)發(fā)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:打編號(hào)004(代號(hào)004)
      下一篇:AMORLINC(amorlinc怎么讀)
      相關(guān)文章
      国产精品亚洲综合久久| 亚洲理论片在线中文字幕| 精品丝袜国产自在线拍亚洲| 日韩亚洲AV无码一区二区不卡| 亚洲国产精彩中文乱码AV| 亚洲午夜福利717| 亚洲精品在线视频| 国产精品亚洲综合一区在线观看 | 日韩va亚洲va欧洲va国产| 亚洲情侣偷拍精品| 亚洲免费无码在线| 亚洲国产aⅴ综合网| 亚洲国产成人精品女人久久久| 亚洲国产综合无码一区二区二三区| 国产亚洲午夜精品| 亚洲成片观看四虎永久| 亚洲精品成人网久久久久久| 亚洲国产综合人成综合网站| 国产亚洲精品久久久久秋霞| 国产精品久久久亚洲| 久久久亚洲精品国产| 亚洲最大成人网色| 亚洲高清日韩精品第一区| 亚洲最大成人网色| 亚洲精品国产成人| 亚洲人成电影在线观看青青| 亚洲国产成人精品激情| 亚洲一区二区三区成人网站| 2019亚洲午夜无码天堂| 天堂亚洲国产中文在线| 亚洲欧美国产国产一区二区三区| 亚洲av无码一区二区三区四区| 免费观看亚洲人成网站| 亚洲AV网站在线观看| 亚洲伊人成无码综合网| 亚洲宅男天堂在线观看无病毒| 国产AV无码专区亚洲AV男同 | 亚洲人成网站在线播放2019 | 亚洲a级在线观看| 亚洲精品伦理熟女国产一区二区| 天天综合亚洲色在线精品|