搜尋

隨機推薦

 

Tim Morgan@flickr.com

在我還在上學的時候,key-value這個詞更多的還是和hash表聯繫在一起的。而現在,當我看見key-value這個詞,馬上聯想到的就是 BigTable,SimpleDB和雲計算。當下,key-value store(或者叫key-value Database,雲存儲等等)是個非常時髦的詞彙,越來越多的開發人員(特別是互聯網企業)開始關注和嘗試key-value的存儲形式。這年頭如果你還和別人聊關係型數據庫,貌似你都不好意思和人打招呼。

可是,key-value store真的有這麼神奇嗎?畢竟,關係型數據庫已經主導市場三十多年了。

網址: http://yoshinorimatsunobu.blogspot.co ... l-as-nosql-story-for.html

 

日本 DeNA 公司的 YOSHINORI MATSUNOBU 不久前公開了一個 MySQL 外掛 HandlerSocket ,這個外掛安裝後會為 MySQL 開啟額外的連線介面,透過這個介面可以用非 SQL 語法直接存取儲存在 MySQL 的資料,藉此改善 SQL 語法解析造成的資料存取瓶頸,而且有了驚人的成效。

 

在作者的測試環境,透過簡單的 Key-Value 查詢,得到下面3個每秒查詢數量:

MySQL + SQL = 105,000

memcached = 420,000

MySQL + HandlerSocket = 750,000

 

雖然上述的測試都是在記憶體中進行,但是效能有大幅的改進,非常值得一試。

 

隨後沒多久, mysqlperformanceblog 的 Vadim 用 SSD 進行測試:http://www.mysqlperformanceblog.com/2 ... /02/handlersocket-on-ssd/

 

在 SSD 進行的測試中雖然不如記憶體,但效能降低的程度不會像傳統硬碟組成的陣列那樣, Vadim 表示也許會再未來版本的 Percona Server 加入這個外掛。

 

原始作者只有提供 C++ 與 Perl 存取介面,已經有各種延伸到其他語言的實作,在 PHP 已經可以看到3個:

http://openpear.org/package/Net_HandlerSocket

http://github.com/tz-lom/HSPHP

http://code.google.com/p/php-handlersocket/

 

預期最後一個,以 PHP 外掛實作的版本,應該會有比較好的效率(未經測試)。

專案網址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

 

在 Ubuntu 安裝的教學:http://ronaldbradford.com/blog/mysql- ... -under-ubuntu-2010-11-05/

 

http://blog.chenlb.com/2010/05/mongod ... ql-query-performance.html
有人發這種測試
mongodb 的 key value 查詢也是比起 mysql 快上數倍
但看來 HandlerSocket 可以補足 SQL 語法效能的缺憾做到和 mongodb 一樣快 (搞不好更快 ?)
真是越看越覺得很有發展性

 

簡介: 設計模式只是為 Java™ 架構師準備的 —— 至少您可能一直這樣認為。實際上,設計模式對於每個人都非常有用。如果這些工具不是 “架構太空人” 的專利,那麼它們又是什麼?為什麼說它們在 PHP 應用程序中非常有用?本文解釋了這些問題。

 

設計模式 一書將設計模式引入軟件社區,該書的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗稱 “四人幫”)。所介紹的設計模式背後的核心概念非常簡單。經過多年的軟件開發實踐,Gamma 等人發現了某些具有固定設計的模式,就像建築師設計房子和建築物一樣,可以為浴室的位置或廚房的構造方式開發模板。使用這些模板或者說設計模式 意味著可以更快地設計更好的建築物。同樣的概念也適用於軟件。

設計模式不僅代表著更快開發健壯軟件的有用方法,而且還提供了以友好的術語封裝大型理念的方法。例如,您可以說您正在編寫一個提供鬆散耦合的消息傳遞系統,也可以說你正在編寫名稱為觀察者 的模式。

用較小的示例展示模式的價值是非常困難的。這往往有些大材小用的意味,因為模式實際上是在大型代碼庫中發揮作用的。本文不展示大型應用程序,所以您需要思索的是在您自己的大型應用程序中應用示例原理的方法 —— 而不是本文演示的代碼本身。這不是說您不應該在小應用程序中使用模式。很多良好的應用程序都以小應用程序為起點,逐漸發展到大型應用程序,所以沒有理由不以此類紮實的編碼實踐為基礎。

既然您已經瞭解了設計模式以及它們的有用之處,現在我們來看看 PHP V5 的五種常用模式。

最近工作稍微空了點,正好又有幸見到了盛大的在線合併工具,於是一時興起,把YUI Compressor改造了一下,寫了個在線合併JS和CSS的工具,命名為Merpressor,目前已經在工作中使用了。

Mepressor分為兩個部分:一部分為公網發佈時所用,使用Java編寫;另一部分為本地調試時所用,使用輕量和方便的PHP編寫。(似乎很繞,簡單地講:Java版本用來公網部署,合併同時壓縮代碼;PHP版用來本地測試,並不壓縮內容。)

MYSQL優化之加速 INSERT插入一條記錄花費的時間由以下幾個因素決定,後面的數字大致表示影響的比例:
  1. 連接:(3)
  2. 發送查詢給服務器:(2)
  3. 解析查詢:(2)
  4. 插入記錄:(1 x 記錄大小)
  5. 插入索引:(1 x 索引數量)
  6. 關閉:(1) 

這裡並沒有考慮初始化時打開數據表的開銷,因為每次運行查詢只會做這麼一次。

如果是 B-tree 索引的話,隨著索引數量的增加,插入記錄的速度以 log N 的比例下降。

 

請看下圖,我在Google Code上,針對每個程序語言都搜索了一下“fuck”一詞的出現文件的個數X,以及沒有出現fuck一詞的文件的個數Y,然後放在Excel裡求了一下百分比(X/(X+Y) * 100%),做了一個圖。結果,JavaScript語言中出現的次數高達0.56%,名列全部語言之首,然後是Perl,C 和 PHP。(對於Javascript程序員的這種行為可以理解,因為IE,因為瀏覽器嘛,我就不多說了)

Google Code 中程序語言出現 fuck 一詞的比率

相關的數據表格如下:

 

Google Code 中程序語言出現 fuck 一詞的比率

這兩天,Charles研究Yii框架的使用,注意到Yii的配置文件,採用一種寫法。如下:

  /**
* 註釋若干
* 以下是一個格式如config.php的文件
*/

return array(
'config1' => 'some value',
'config2' => 'some value',
);
?>

在這個文件中,直接就寫了一個return,這個用法又一次突破了我的常識。特意查詢了一下文檔,裡面這樣描述的:

return

If called from within a function, the return() statement immediately ends execution of the current function, and returns its argument as the value of the function call. return() will also end the execution of an eval() statement or script file.

If called from the global scope, then execution of the current script file is ended. If the current script file was include()ed or require()ed, then control is passed back to the calling file. Furthermore, if the current script file was include()ed, then the value given to return() will be returned as the value of the include() call. If return() is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file's execution is ended.

return語句可以終止函數執行那自不必說了,這裡還提到了可以終止eval過程的進行,並且如果處於被include的文件中,還能使return的值成為include和require函數的返回值。這樣寫的好處是,一個語句就可以得到配置項的內容了。

  //原來這樣寫
require './config.php';
function test() {
global $config;
if ($config['a']=='b') echo 'hello';
}

//現在
function test() {
$config = require('./config.php');
if ($config['a']=='b') echo 'hello';
}
?>

作者:Charles

原文鏈接:[Tips] PHP中return的用法

這是一篇關於 Cufon 技術的小文章。什麼是 Cufon 呢?簡單的說,Cufon 是一個用來替代 sIFR 框架,實現在網頁中對文字字體進行渲染功能的純 JavaScript 開源類庫。

為什麼要使用 Cufon

那麼為什麼要使用 Cufon 呢?這要從 Web 開發人員,所經常面對的一種「衝突」,即「字體(Font Family)衝突」開始講起。

通常的這一沖突總是爆發於 Web 頁面的設計者(Designer)和開發者(Coder)之間。在很多場合下,Web 頁面的設計者都會傾向於在他們的頁面設計稿中,為文字附加使用一些「特殊」的字體和特效,以此來展示他們卓越的設計能力。

如下圖 1 所示,是某設計者為公司 A 所設計的一個公司簡介頁面(部分)。在其中為了突出公司的「親和力」,設計者使用了一種名為 Baroque Script 的手寫字體。

假設a,b表各有10萬筆資料,兩者透過共同的Id欄位要作inner join 通常sql的語法會下:
SELECT *
FROM a
INNER JOIN b ON a.Id=b.Id
WHERE a.Id=1

但我在想, 語法上是先過濾資料再join,還是先join再過濾?? 或許考慮下面的語法會更佳:
SELECT *
FROM a
INNER JOIN b ON b.Id=a.Id AND b.Id=1
WHERE a.Id=1

Please publish modules in offcanvas position.