Druid是一個JDBC組件,它包括四個部分:
- DruidDriver 代理Driver,能夠提供基於Filter-Chain模式的插件體系。
- DruidDataSource 高效可管理的數據庫連接池。
- SQLParser
- 擴展組件
- Binary: http://code.alibabatech.com/mvn/releases/com/alibaba/druid/0.1.2/druid-0.1.2.jar
- Source: http://code.alibabatech.com/mvn/releases/com/alibaba/druid/0.1.2/druid-0.1.2-sources.jar
Druid可以做什麼?
- 可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。
- 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池。
- 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是不好的行爲,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
- SQL執行日誌,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的數據庫訪問情況。
- 擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。
DruidDriver,是一個ProxyJdbcDriver,它提供了Filter-Chain模式的擴展機制,使得在Jdbc擴展編程特別方便。
Druid提供了一些內置的擴展機制,包括Stat、Log、Trace、HA等擴展。
DruidDataSource是一個數據庫連接池的實現,它的設計目標是提供一個當前最好的數據庫連接池,在性能、擴展性等方面取得最合適的平衡,取代DBCP、C3P0等連接池。
- 高性能。測試數據表明,Druid比DBCP、C3P0、BoneCP的性能都好很多。具體請看測試數據
- 可管理性,DruidDataSource本身提供了很多監控屬性,具體看這裏。DruidDataSource支持StatFilter,具體配置看 這裏
- 可擴展性,提供基於Filter-Chain模式的擴展機制。具體自定義擴展的例子看這裏。
- 替換DBCP,配置和DBCP兼容,可以方便替換DBCP。
- 適合大規模應用。結合Alibaba使用數據庫連接池的經驗,避免一些已知問題,例如數據庫不可用恢復之後產生的連接風暴問題等。
設計
這是DruidDataSource的設計圖示:
http://code.alibabatech.com/svn/druid/trunk/doc/druid-pool.txt
如果發現有亂碼,請選擇utf-8的編碼方式查看。
Druid提供一個手工編寫的高性能的方便擴展的SQL Parser。將會支持MySQL、Oracle等流行關係數據庫的SQL Parser。
Parser組件包括如下幾個部分:
- Lexer 詞法解析
- Parser,Parser包括ExprParser,各種StatementParser。
- AST, Abstract Syntax Tree。ParserParse出來的結果就是AST。
- Visitor。對AST做各種處理,比如FormatOutput,遍歷等等。
簡介
Druid提供了強大的監控功能,能夠監控連接池行爲和SQL執行情況,讓你能夠詳細瞭解應用的數據庫訪問行爲。
監控對象
- Druid的統計信息定義代碼實現在com/alibaba/druid/stat下。所有的Stat都全局靜態變量的方式保存,這樣做使得外部獲取監控信息更容易。
- 獲取Druid監控信息的入口是com.alibaba.druid.stat.JdbcStatManager
- Druid的監控統計信息都是通過StatFilter來實現的,如果你需要數據源進行監控,那你需要啓用StatFilter
Subversion
http://code.alibabatech.com/svn/druid/trunk/
Download
Binary:
http://code.alibabatech.com/mvn/releases/com/alibaba/druid/0.1.2/druid-0.1.2.jar
Source:
http://code.alibabatech.com/mvn/releases/com/alibaba/druid/0.1.2/druid-0.1.2-sources.jar
Maven
Alibaba Open Source Repository
<repositories>
<repository>
<id>alibaba-opensource</id>
<name>alibaba-opensource</name>
<url>http://code.alibabatech.com/mvn/releases/</url>
<layout>default</layout>
</repository>
<repository>
<id>alibaba-opensource-snapshot</id>
<name>alibaba-opensource-snapshot</name>
<url>http://code.alibabatech.com/mvn/snapshots/</url>
<layout>default</layout>
</repository>
</repositories>
依賴配置
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>0.1.2</version>
</dependency>
</dependencies>