MySQL cache and memcache

關於各項 Cache 方式與 mysql cluster 架構的整理與心得..

MySQL Query Cache

MySQL 本身內建有 Query Cache,能夠把下過 SQL 的結果快取起來,在這句 SQL 關聯到的表都沒變動的情況下,就可以透過 Cache 來從記憶體就取得資料。前提是要在 my.conf 內設定 Query Cache 的 Size,建議是 16MB ~ 32 MB。

但是採用 Query Cache 本身其實有一些擴展性的問題,沒有辦法在 Master Slave 良好的利用,而且Query Cache 的 Size 也比較小,又有容易需要重新取資料的問題,比較沒有彈性去修改內部的策略。

實際上可以在正式環境下加速網站 10% 以上的速度。

Memcached

Memcache 是大型網站用蠻多的一個架構,能將許多暫時的資料存在記憶體內,且支援分散式的 key value 儲存。具有良好的延展性,並且可以與許多不同的應用搭配,很輕鬆的就可以建立一個上 「百駒」的快取系統。

MySQL Proxy

MySQL 要架設叢集式架構時,需要分為 Master Slave ,分別負責讀寫,然後可以透過 MySQL Proxy 來負責將這兩種要求做切割與整合,就不用修改程式了。並且可以把一些 Query Cache 合併起來。運作流程如下圖所示。

MySQL Proxy and Memcache

http://jan.kneschke.de/2008/5/18/mysql-proxy-replicating-into-memcache

這個網誌可能是 MySQL proxy 的作者群之一,裡面有許多相關的新聞,他裡面有提到一個概念就是想要把 MySQL Proxy 的 Cache 存放到 Memcache 來增加 Cache 的彈性。

MySQL Cluster

MySQL 提供的分散式 HA 方案,整個架構由三種節點組成,管理節點(MGM)、儲存節點(NDB)、SQL節點(mysqld),每種類型的節點都能架設數台伺服器來提高效率,也可以將他全部合併在一台內。

SQL 節點就像一般一台伺服器的 MySQL 一樣,可以下 SQL 存資料,但是只要指定資料表引擎是 NDB 就會把資料分散儲存到網路儲存節點內。

我猜測 SQL node 主要是 CPU 的消耗比較大,因為要解析 SQL,NDB 則是記憶體跟 disk I/O 吧。主要透過這種方式可以很輕鬆的增加主機來克服瓶頸。但分散式系統的管理上是一個不小的問題。

http://dbperf.wordpress.com/2011/03/04/mysql-cluster-setup-and-replication-between-ndb-and-non-ndb-engines-2/

MySQL NDB

MySQL Cluster 的儲存引擎是分散的 NDB Engine(Network Database),以下的文章提到如果透過 NDB 的暫存表來儲存 Web 的 Session 比直接用 MySQL 的 memory engine 來比有如下的好處,主要應該是因此有一個具擴展性的資料庫吧~這應該用 memcache 來做也有一樣的優勢~

  • Row level locking
  • Hash index for the primary key
  • Varchar not expanded, true varchar size
  • Scalable, can be spread across a large number of servers, more memory, more CPU
  • Many MySQL servers can access the session table in a consistent way. A good practice is a local MySQL daemon on each application server
  • Less volatile then the Memory engine, as long as the cluster is up, the table is there

High performance replacement of the MySQL Memory storage engine with NDB

MySQL Cluster with memcached

為了讓 MySQL 可以大步邁入大量資料的世界,許多專案在幫忙 MySQL 做一些銜接上的工作,例如 handlerSocket 可以透過不透過 SQL 直接取得 MySQL 儲存引擎內部資料。而現在官方也推出了一個方案來做類似的事,可以透過 memcache 的 api 來直接存取 NDB 內部的資料。

介紹的網誌文章 NoSQL to MySQL with Memcached

介紹的投影片 the-native-ndb-engine-for-memcached

Scalable, persistent, HA NoSQL Memcache storage using MySQL Cluster

一些關於 MySQL Cluster 與 memcache 的整合方式與安裝…

http://www.clusterdb.com/mysql-cluster/scalabale-persistent-ha-nosql-memcache-storage-using-mysql-cluster/

最佳化 MySQL Cluster 的測量

http://johanandersson.blogspot.com/2010/09/mysql-cluster-performance-select-on-pk.html

 

APC

http://www.scribd.com/doc/88689/ApcFacebook

apc 開啟對 php 效能的影響,啟用對開發與使用的實際影響非常低,但卻有很好的效果值得投入學習!

參考資料:

  1. MySQL Proxy 安裝
  2. MySQL 負載平衡
  3. MySQL Proxy 使用經驗
  4. MySQL 安裝與圖文詳解

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *