Ulf Wendel, Oracle Introduction and overview, Edition 2011 The MySQL native driver for PHP (mysqlnd)
The speaker says... The MySQL native driver for PHP (mysqlnd) is a drop-in replacement for the MySQL Client Library (AKA l...
<ul><li>New, unmatched features </li></ul><ul><ul><li>Plugin API for extensions – client-side proxies
Asynchronous, non-blocking queries
Performance statistics, read-only variables, ... </li></ul></ul>The mysqlnd library MySQL Server
The speaker says... The mysqlnd library implements the MySQL Client Server protocol.  All three PHP MySQL extensions can b...
<ul><li>Open source plugins available from PECL </li></ul><ul><ul><li>mysqlnd_ms – Replication and Load Balancing
mysqlnd_qc – Client-side query caching
mysqlnd_uh – Monitoring, rewriting, ... with PHP
Prototypes: SQL injection protection, multi-query, ... </li></ul></ul>Plugin API for extensions -> Presentation -> Documen...
The speaker says... A C plugin API is available for extending the mysqlnd C library.  Open source, ready-to-use plugins ar...
<ul><li>MySQL Replication support drop-in solution </li></ul><ul><ul><li>Read/write splitting: automatic, user-defined
Load Balancing: round robin, random, user-defined
Client failover, master on write, transaction aware, ... </li></ul></ul>Replication and Load Balancing -> Presentation -> ...
The speaker says... The Replication and Load Balancing plugin (mysqlnd_ms)  has been designed as a drop-in solution. For s...
<ul><li>Transparent and fast TTL-based client-side cache </li></ul><ul><ul><li>Cache control: TTL using SQL hint, user-def...
Storage: Memcache, SHM (APC), memory, user, ...
Upcoming SlideShare
Loading in …5
×

MySQL native driver for PHP (mysqlnd) - Introduction and overview, Edition 2011

7,167 views

Published on

A quick overview on the MySQL native driver for PHP (mysqlnd) and its unique features. Edition 2011. What is mysqlnd, why use it, which plugins exist, where to find more information.... the current state. Expect a new summary every year.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,167
On SlideShare
0
From Embeds
0
Number of Embeds
2,971
Actions
Shares
0
Downloads
30
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

MySQL native driver for PHP (mysqlnd) - Introduction and overview, Edition 2011

  1. 1. Ulf Wendel, Oracle Introduction and overview, Edition 2011 The MySQL native driver for PHP (mysqlnd)
  2. 2. The speaker says... The MySQL native driver for PHP (mysqlnd) is a drop-in replacement for the MySQL Client Library (AKA libmysql). All PHP MySQL extensions can be compiled to use mysqlnd instead of libmysql. The mysqlnd library ships with PHP as PHP 5.3. Mysqlnd is part of the PHP source tree and distributed under the terms of the PHP license to avoid any license issues. PHP builds for Windows obtained from php.net use mysqlnd since PHP 5.3. Mysqlnd is a compile time default for all PHP MySQL extensions as of PHP 5.4.
  3. 3. <ul><li>New, unmatched features </li></ul><ul><ul><li>Plugin API for extensions – client-side proxies
  4. 4. Asynchronous, non-blocking queries
  5. 5. Performance statistics, read-only variables, ... </li></ul></ul>The mysqlnd library MySQL Server
  6. 6. The speaker says... The mysqlnd library implements the MySQL Client Server protocol. All three PHP MySQL extensions can be compiled to use it to communicate with MySQL. Mysqlnd is tightly integrated into PHP and highly optimized for it. Therefore, it can outperform the MySQL Client Library in certain areas. The MySQL Client Library is a general purpose library for all kinds of C/C++ clients. As such, it cannot offer all mysqlnd features. For example, memory savings by read-only variables (transparent for users) or respect of PHP memory limits is not possible without tight integration into PHP.
  7. 7. <ul><li>Open source plugins available from PECL </li></ul><ul><ul><li>mysqlnd_ms – Replication and Load Balancing
  8. 8. mysqlnd_qc – Client-side query caching
  9. 9. mysqlnd_uh – Monitoring, rewriting, ... with PHP
  10. 10. Prototypes: SQL injection protection, multi-query, ... </li></ul></ul>Plugin API for extensions -> Presentation -> Documentation
  11. 11. The speaker says... A C plugin API is available for extending the mysqlnd C library. Open source, ready-to-use plugins are available from PECL. Plugins for MySQL replication and load balancing support (mysqlnd_ms), a client-side query cache (mysqlnd_qc), a swiss-army-knife plugin (mysqlnd_uh) which allows writing plugins with PHP for easy query monitoring, query rewriting and more. Plugins are client-side proxies. They operate on their own layer below the application. Plugins can be drop-in solutions requiring no application changes!
  12. 12. <ul><li>MySQL Replication support drop-in solution </li></ul><ul><ul><li>Read/write splitting: automatic, user-defined
  13. 13. Load Balancing: round robin, random, user-defined
  14. 14. Client failover, master on write, transaction aware, ... </li></ul></ul>Replication and Load Balancing -> Presentation -> Documentation MySQL Server 1 MySQL Server 2 MySQL Server n
  15. 15. The speaker says... The Replication and Load Balancing plugin (mysqlnd_ms) has been designed as a drop-in solution. For simple use cases no application changes are required when stepping up from a single MySQL server to a MySQL replication cluster. Advanced users can overwrite all automatic decisions of the plugin to handle arbitrary complex use cases. Goodies built-in to version 1.1.1 (early - more to come!) include use of master after first write to fight replication lag, transaction awareness and use of master, optional failover.
  16. 16. <ul><li>Transparent and fast TTL-based client-side cache </li></ul><ul><ul><li>Cache control: TTL using SQL hint, user-defined, all
  17. 17. Storage: Memcache, SHM (APC), memory, user, ...
  18. 18. Slam/overload detection, no-double serialization, ... </li></ul></ul>Client-side cache -> Presentation -> Documentation MySQL Server Memcache SHM (APC), ...
  19. 19. The speaker says... PECL/mysqlnd_qc is an easy to use client-side query cache. The cache is TTL based. Cached query results can be stored in various places: Memcache, shared memory (APC), process memory, SQLite or user-defined. Depending on the storage the cache results can be shared within the PHP process, all PHP processes running on a server or multiple servers. Caching is controlled with SQL hints. Optionally, all queries can be cache or a callback can be installed to control caching. The plugin is faster than any PHP solution by avoiding double-serialization. Goodies built-in to version 1.0.1 (early - more to come!) include slam protection ala Memcache and variable storage.
  20. 20. <ul><li>Swiss-army-knife for debugging and prototyping </li></ul><ul><ul><li>Hooking of mysqlnd library calls with PHP
  21. 21. 'Plugins' with PHP not C, no application changes
  22. 22. Monitoring, Rewriting, Failover, you-name-it... </li></ul></ul>User handler -> Presentation -> Documentation MySQL Server
  23. 23. The speaker says... PECL/mysqlnd_uh is the swiss-army knife of the plugins. Developed by Mayflower Open Source Labs, it lets you hook internal mysqlnd library calls from PHP! In other words: you can manipulate many library calls, such as connect() or query(), to write client-side proxies that work around application limitations. Use cases include query monitoring, query rewriting, auditing, failover, … Consider it, whenever you need a quick hack and you can't change the applications source code. It is best used for debugging and prototyping. Take care when using: you are hacking mysqlnd!
  24. 24. <ul><li>Non-blocking queries with mysqli @ mysqlnd </li></ul><ul><ul><li>Non-blocking time: max(t1, t2, ..., tn)
  25. 25. Blocking time always higher: t1 + t2 + … + tn
  26. 26. Perfect for application-level sharding! </li></ul></ul>Asynchronous queries -> Presentation -> Documentation
  27. 27. The speaker says... The mysqlnd library features non-blocking queries. A PHP script can perform other tasks, while waiting for a query result to be computed by MySQL. For example, the script can open additional connections to send additional statements. The total processing time for all statements performed in a non-blocking stlye is the run-time of the slowest statement. This is always faster than running statements in a blocking way, when individual run-times add up to the total run-time. Typical use-case: application-level sharding. Query multiple shards in a non-blocking way without extra message queue!
  28. 28. <ul><li>Unique to mysqlnd... </li></ul><ul><ul><li>150+ core performance statistics
  29. 29. 30+ query cache performance statistics
  30. 30. read-only variable concept for memory savings
  31. 31. debug and trace log
  32. 32. … find documentation: php.net/
  33. 33. … read development blogs: planet.mysql.com
  34. 34. … read more development blogs: planet-php.org
  35. 35. … follow on Twitter: @phperror , @Ulf_Wendel </li></ul></ul>Other goodies
  36. 36. The speaker says... The mysqlnd library and its plugins are under constant development. It is well worth checking the documentation at php.net frequently for updates. It is even better to scan planet.mysql.com and planet-php.org. The mysqlnd developers try to blog and twitter about ideas, prototypes and latest developments, seeking for early feedback. However, if you are seriously interested in contacting us, which we hope you are, it should not be difficult to get in touch. Personally and virtually. Looking forward to answer your mysqlnd requests!
  37. 37. THE END Credits: Andrey Hristov, Johannes Schlüter - Contact: ulf.wendel@oracle.com

×