php5.3新特性 之 mysql native driver(mysqlnd)

概述

mysql native driver(mysqlnd) 自從php5.3.0開始成爲官方源代碼的一部分,
用來取代傳統的mysql client library(libmysql)。

mysqlnd是C語言寫成的PHP擴展(PHP extension)。

php5.3.0之前,碼農們操作數據庫使用的mysql擴展函數(mysql_connect,mysql_query等函數), mysqli系列函數, PDO MYSQL函數,都是通過libmysql來與mysql數據庫進行通信的。

mysqlnd出現之後,SA們就多了一個選擇: 可以通過mysqlnd來與mysql數據庫進行通信。

mysqlnd不能做什麼

雖然mysqlnd是一個PHP擴展,但它卻沒有提供任何的php函數(或者說是API)給碼農們使用。
碼農們仍然使用mysql 擴展函數(mysql_connect, mysql_query…),或者mysqli,或者PDO MYSQL來操作數據庫。 這些函數都可以通過mysqlnd來與mysql數據庫通信。

它是數據庫與php函數的中間層。

爲什麼要使用mysqlnd

原來的libmysql用的好好的,爲什麼還要搞一個mysqlnd出來呢?

原因一: license問題

libmysql是MYSQL AB公司開發的,現在已經是Oracle集團所屬的了,它使用MYSQL license發佈。
This ultimately led to MySQL support being disabled by default in PHP

mysqlnd 是php的一部分,使用PHP license發佈。
從此 licensing 的問題就算是解決了。

原因二:編譯問題

使用libmysql的時候,如果要正常編譯php,必須首先安裝好mysql。
如果是單純的一臺WEB服務器,裝個mysql似乎有點浪費了。

mysqlnd的話,就不必安裝mysql,直接可用。

原因三:性能問題

由於mysqlnd是一個php擴展,使用了php memory management system,在內存使用方面效率相當高。
舉個例子:
使用libmysql的時候,mysql結果集中的每一行都在內存中儲存了二次
使用mysqlnd,結果集只會儲存一次。

而且它還服從於php.ini中memory_limit的設置。

Using MySQL Native Driver leads to comparable or better performance than using MySQL Client Library。

mysqlnd的新特性

1 改進的persistent connection。
2 特殊函數 mysqli_fetch_all()

http://cn2.php.net/manual/en/mysqli-result.fetch-all.php

只有安裝了mysqlnd, mysqli中的這個函數纔可用。

3 Performance statistics calls: mysqli_get_cache_stats(), mysqli_get_client_stats(), mysqli_get_connection_stats()
在分析性能瓶頸的時候,這些函數還是蠻好用的。
詳細文檔可以看這裏: http://cn2.php.net/manual/en/mysqlnd.stats.php

4 使用mysqlnd之後,mysqli也支持persistent connection了。

這樣看起來,mysqli受益最多。
5 PHP 5.3.3 之後,mysqlnd支持SSL。

6 PHP 5.3.2 之後,mysqlnd支持Compressed Protocol

7 PHP 5.3.4 之後,windows系統中的mysqlnd支持Named Pipes。

如何安裝mysqlnd

LINUX環境中,默認情況下,php中的mysql擴展還是會使用libmysql的。
如果要使用mysqlnd,就要加一個configure的參數:

./configure --with-mysql=mysqlnd /

--with-mysqli=mysqlnd /

--with-pdo-mysql=mysqlnd /

[other options]

這樣mysql, mysqli, pdo mysql都會使用mysqlnd。

WINDOWS中,mysqlnd默認啓用,並且mysql, mysqli, pdo 默認都會使用mysqlnd。
什麼都不用做。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章