以往 MySQL + memcached 的作法是由 application 端「拉」資料後再塞到 memcached 上,這會產生幾個問題:
- 資料不同步:MySQL 上的資料更新了,但 memcached 裡的 cache 因為還沒過期而尚未更新。
- 第一次的 Race Condition:同時有很多 client 向 memcached 要一份目前還不存在的 cache,這時候這些 client 都會跑到 MySQL 要資料再放一份到 memcached 上。
這兩個問題都有在 MySQL UDF + memcached 出來之前都有解法:前者可以在更新 MySQL 時順便更新 memcached 裡的資料;後者可以靠 memcached lock 的技巧避免突然有大量 Query 造成後端 MySQL 負荷過重。這兩個方法需要 application (client) 配合,不是很完美,但在實際應用上還算堪用。(一個很簡單的場景:如果公司內同時使用 PHP 與 Perl,那麼就必須維護這兩個 library)
除了 client 自己推資料到 memcached 上,也有人研究,當 MySQL 上的資料更新時,由 MySQL server 自動到 memcached 上更新資料,也就是把資料「推」到 memcached 上的方法。資料更新時的觸發動作可以用 MySQL Trigger 做到,而寫入到 memcached 的部份透過強者的 libmemcached 處理:Memcached Functions for MySQL。
btw,Jan Kneschke 也用 libmemcache 寫過類似的東西:UDF_LUA 這篇的下方 (「MySQL and memcached」的部份)
收到 Layeredtech 通知要漲價的信,有一台是年繳所以暫時不受影響 (也就是 blog 這台),但另外一台從 $124.20/month 漲到 $149.96/month,大約兩成的漲幅,算過之後決定把上面的服務搬出 Layeredtech,也許是該嚐試其他家了 :p
因為 Twitter 爛太久了,所以搬到被 Google 買下的 Jaiku… (關於 Jaiku 可以參考這篇:[網站] 青出於藍而勝於藍 – Jaiku)
另外,Jaiku 目前正搬移到自家的 Google App Engine 上,如果 Twitter 再不趕快修好就沒機會了:Wroom – we’re moving to Google App Engine。
Update:才剛搬過去就看到這個… XD

在 ReadWriteWeb 的訪談中跟 Google App Engine 的 Product Manager 談到收費的金額:Google App Engine Announces Pricing Plan, APIs, Open Access。
Update:Google 正式的新聞稿也可以在網站上看到了:Google App Engine to Announce Open Sign-ups, Pricing Plans, and New APIs at Google I/O。
頻寬的費用與 Amazon Web Service 差不多,儲存空間的部份跟 Amazon S3 比起來也差不多,CPU 暫時沒有想到要怎麼比較。
除了收費的事情之外,文章裡有提到會多兩組功能,一組是對圖片的處理:目前不清楚 Google 是不是自己有另外開發,不過在自己建置的環境裡常用 GD 或 ImageMagick 處理。另外一組功能是 cache,讓你可以把算好的資料存起來重複使用。
再來是大家一直都很希望 Google App Engine 可以支援 Python 以外的語言,不過照文章裡的說法,目前暫時沒有計畫。
以後應該有 Blog software 會 porting 到 Google App Engine 的環境上,以這種用多少算多少的方式,之後可以考慮把整個站搬到上面?
在 Gogle AJAX Search API Blog 上 Google 公告了他們將會 hosting 幾個常用的 javascript library 讓人使用:Speed up access to your favorite frameworks via the AJAX Libraries API。
最簡單的方法就是把本來的程式碼:
<script type="text/javascript" src="http://static.example.com/jquery-1.2.6.min.js"></script>
改成 Google 提供的位置:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
剛剛先把無名的 album expander 與 PIXNET 的 album expander 所使用的 jQuery 都更新改用 Google 提供的 hosting。
最近在翻一些 Greasemonkey script 的時候翻到 Firefox 上可以使用 document.evaluate(),才發現之前用 jQuery 做這種小事情很不划算…
在 Firefox 上可以透過 document.evaluate() 吃 XPath 條件式找出符合的元素。利用這個功能取代本來用 jQuery $(’.className’) 還蠻容易的,等有力氣的時候來改寫 album expander… :p
Unbound 是一個 DNS resolver (接受 recursive query 的 DNS server),最近出了 1.0.0 版,在 Slashdot 上被提出來:Open Source BIND Alternative Launches。
首先是軟體授權條款,Unbound 與 BIND 都是 open source project,BIND 是 ISC license,Unbound 是 BSD license,兩種授權都很簡短,而且也很清楚。
設定上,BIND 需要設定才能處理 recursive query,雖然很簡單 (設定 allow-recursive 這個參數),但相較於 Unbound 預設值就會動 (unbound.conf.sample 直接拿來用) 就有點不太爽 :p
穩定度的部份,在 Slashdot 上的文章有人提到用 BIND 當 resolver 不太穩定,這點我自己用偶而也會遇到 (對 recursive query 沒有回應)。趁 Unbound 1.0.0 有人推薦的時候決定拿幾台純 resolver 的伺服器試看看…
在 FreeBSD 上安裝的時候有看到 Libevent 的選項可以選,不是很確定他拿 Libevent 做什麼用途。
目前裝起來後用起來都還蠻正常的,觀察一陣子看看。
同上篇文章,因為 twitter 連不上,所以只好寫成 Blog 胡言亂語…
昨天 jserv 講了「我愛 Git」,在台下聽的時候順便試 git-svn (或 git svn) 的操作,發現效能比 SVK 好許多,而我想要的功能在 Git 上面也都有了,那麼… 也沒什麼好說了,先把手上幾個工作目錄換成 Git :p
回到家把雜事處理完後 (主要是玩 Gladiatus?),打開 Bloglines 消化一整天沒讀的 feed,發現 Google 也發了一篇「Develop with Git on a Google Code Project」跟 jserv 的主題還蠻有關係的。
雖然 Google Code 使用 Subversion,但仍然可以透過 Git 操作,操作的方式在 Google 的文章裡寫的很清楚了。如果對於 Git 不熟的人,我建議先看「git-svn」這篇中文的 blog 文章,裡面的例子直接照做就會動。
今天上班的時候再測試看看 performance,把 Zend Framework 1.5.2 整包塞進去會花多久 :p
YouTomb,是 MIT Free Culture 所架設的服務,蒐集 YouTube 上因為版權侵權而被下架的影片。
看完這個網站做的事情後,第一個反應式「這個名字取的真機車」,第二個反應是「這不會被 DMCA 幹掉嗎」。但翻了一下,發現網站的 source code 有以 AGPLv3 釋出,擺明就是「如果我們被抄了,其他人趕快拿 source code 去 clone 一個」XD
在狀態頁還有相當完整的統計,會指出哪些版權擁有團體下架的最多… 第一名居然是 TV TOKYO Corporation,我本來以為會是美國公司…
PS:會寫在 Blog 上的原因是因為 twitter 爛掉了,不然我只打算丟幾句話在 twitter 上的… :/
Zend Framework 1.5.2 正式釋出了,由於 Zend_Form 是 1.5 才納入,所以 1.5 有很多 bug 是在修正 Zend_Form。
像是「很多地雷的 Zend_Form…」中提到的 setRequired() 問題在「value “0″ is treated as empty」被解掉了。
1.5.2 修正的問題,以及改善的地方,可以在「Issue Navigator — Fixed in 1.5.2」這頁看到。
這幾天發現沒有 Zend_Form_Element_File,查了一些討論發現發展團隊似乎要等 Zend_Upload 的架構先出現才要實做 Zend_Form_Element_File,看起來這幾個月內是沒這東西了,先自己寫一個會動的版本… @_@