更新 bash-completion 的位置...

前陣子升了 FreeBSD 上的 bash-completion 之後發現就失效了,翻了紀錄才發現是檔案從 /usr/local/etc/bash_completion 換到 /usr/local/share/bash-completion/bash-completion,所以引用的路徑要改...

過了一個月沒有 hostname auto completion 的日子...

Debian 官方維護的 AWS EC2 Image...

在「Official Debian Images on Amazon Web Services EC2」看到 Debian 官方放出了 AWS EC2 的 AMI:「Cloud/AmazonEC2Image - Debian Wiki」。

之前幾乎都是靠 alestic 製作的版本,現在則是官方直接支援了... 在頁面上除了有連結指到 Debian 官方的版本外 (在 AWS Marketplace 上),另外還列出了其他個人與團體製作的版本。

之後如果要用 Debian 可以選這些 AMI 來用...

PostgreSQL 提供 apt 可以用了...

在「apt.postgresql.org」這篇文章裡看到 PostgreSQL 宣佈官方 apt repository 的正式公告:「PGDG apt repository for Debian/Ubuntu」。

目前支援的 OS 包括了:

  • Debian 6.0 (squeeze)、7.0 (wheezy) 與 unstable (sid)
  • Ubuntu 12.04 (precise)

其中 Ubuntu 10.04 (lucid) 還正在進行。而 PostgreSQL 的版本從 8.3 到 9.2 (包括了 8.{3,4} 以及 9.{0,1,2} 這五個版本) 都支援。

比較特別的是居然支援 unstable,大概是因為自己要用?

來測試看看好了...

AWS 的儲存空間降價 (S3 與 EBS)

雪梨也是同樣降幅,而且最高的 >5000TB 沒降,應該是因為 AWS re:Invent 辦這麼大,總是要有些東西看起來很炫?

降價範圍除了 Standard Storage 以外也包括 Reduced Redundancy Storage,降幅很大,從 24% 到 28% (約 1/4):「Amazon S3 Storage Price Reduction (24 to 28%)」。

其他幾個對手壓力很大啊 XD

MySQL 中,MyISAM 與 InnoDB 帶來的差異...

標題所提到的兩個 engine 是在 MySQL 中最常用到的兩個 engine。其中 MyISAM 是在 MySQL 5.1 之前的 default engine,InnoDB 則是 MySQL 5.5 之後的 default engine。

這篇主要是講 MySQL 5.1 + InnoDB Plugin,或是 MySQL 5.5 後的情況。

MyISAM 是 Table-level lock,當有寫入時其他人無法讀取 (有少數例外,像是 bulk insert)。而 InnoDB 設計成 Row-level lock,在寫入時有很大機會還是可以讀取。

另外,InnoDB 支援 ACID transaction,對於學過資料庫理論的人 (像是科班出身) 會覺得比較「親切」,比起 MyISAM 有很多東西可以用。

大多數不換 InnoDB 有幾個原因:

InnoDB 佔用的空間比較大

最常見的原因是認為 InnoDB 相對 MyISAM 所佔用的空間會大不少 (看過三倍大的):但在 InnoDB 自從推出壓縮功能後就接近很多 (看過只大 20% 的,甚至有可能比 MyISAM 小)。而資料量的問題可以參考 Mobile01 的 55GB (2012 年 10 月 uid=1 的蔣大在 Mobile01 上揭露的數字)。

當網站夠大時,記憶體與用 15KRPM SAS 硬碟加上 RAID1+0 的一次性成本其實不高。

InnoDB 不好備份

第二個常見的原因是認為 MyISAM 備份比較容易,直接 copy 就可以備份:這種備份方式其實有很高的風險造成 inconsistent backup (「備份的資料損毀」)。以交易的例子來說,有 auction 與 user 兩個表格,按照字母順序先複製了 auction 表格,再複製 user 表格,中間使用者用點數購買了某個物品 (扣 user 表格裡的點數,在 auction 裡建立一筆資料)。這份備份裡就會備份到「user 內的點數扣掉,但 auction 沒有資料」的情況。

比較好的方式是用 InnoDB 提供的 transaction 建立 consistent backup,備份時長時間讀取不會像 MyISAM 無法寫入。另外一種方式是建立 backup 專用的 slave,要備份時可以整台 slave 停掉備份 (還有像是 filesystem snapshot 之類的方式,這邊跳過)。

書上寫 MyISAM 效能比較好...

是的,不過這個前提是「如果你只有讀取」。

MyISAM 讀取效能比較好並不是指 MyISAM query 一次 <1ms 時 InnoDB query 一次就要 100ms 這種程度。兩個都還是在 <1ms,只是當你用到「效率不好的 query」時,MyISAM 在 Table scan 的效能會比 InnoDB 好。

但當網站變大遇到 MyISAM + table scan 時就完蛋了:一個 query 卡 1 秒就代表網站上寫入時遇到這個 query 時最少要卡一秒,InnoDB 反而能救你。(雖然這不是好的方向。好的方向應該是想辦法解決 Table scan 的問題,可能是改 query,也有可能是增加 index 或修改 index)

也因為以上的特性,當使用 InnoDB 時,可以這樣設計:

只對時間敏感 Query 加上 Index

以前用 MyISAM 時為了避免跑報表會造成其他線上服務的 query 卡住,如果用 InnoDB 因為不會卡,報表的 query 沒有 index 而 table scan 也是可以接受的。

有嚴格資料正確性需求的 Query 使用 Transaction

像是金流相關系統,一筆購買紀錄可能要修改好幾個表格。用 MyISAM 時必須對好幾個表格使用 TABLE LOCK (仍然有 atomic 問題),現在可以用 transaction 解決。

資料庫正規化

有可能會因為 MyISAM 卡 query 的問題而設計出非正規化的 schema。用 InnoDB 可能可以正規化,用適當的設備成本 (像是適當使用 JOIN) 降低人力維護成本。

虛擬機內的 Side-channel attack...

前陣子在其他地方看到,不過剛剛在「Stealing VM Keys from the Hardware Cache」看到利用 Side-channel attack 的攻擊:「Cross-VM Side Channels and Their Use to Extract Private Keys」。

實際攻擊的項目是 libgcrypt 實做的 ElGamal 演算法,長度是 4096bits。環境是 Xen,限制是在同一台實體機器上。

對抗 side-channel attack 的幾個方法:實體隔離 (效果最好) 或是改善演算法 (通常是犧牲一些演算法效率,換取難以被外部預測的保護)。前者也就是 AWS 為了符合美國政府要求所建立 AWS GovCloud (US) 的原因之一。

MySQL 5.6 可以唯讀狀態掛起 InnoDB 資料了...

在「InnoDB now works with read-only media」這邊看到 MySQL 從 5.6.7 開始,可以在唯讀狀態掛起 InnoDB 資料:「14.2.6.1. Support for Read-Only Media」。

這對 recovery 相當方便,尤其是人為失誤 (人為下錯指令 TRUNCATE 或是 DROP TABLE) 時可以馬上從 read-only snapshot 掛一份起來複製資料。

WordPress.com 支援 Bitcoin...

昨天 WordPress.com 宣布支援使用 Bitcoin 購買服務。印象中這應該是第一個大型商業網站支援 Bitcoin 付款:「Pay Another Way: Bitcoin」。

WordPress.com 是跟 BitPay 合作,實際上會依照匯率收到美金,不太需要承擔 Bitcoin 匯率不穩的問題。即使如此,這也是很大的進展... 第一步是有兌換商願意出來收 Bitcoin 付美金,以及有商業公司願意使用這些服務。

AWS 澳洲開台!

AWS 在澳洲雪梨開台:「New Asia Pacific (Sydney) Region in Australia - EC2, DynamoDB, S3, and Much More」,成為目前 AWS 南半球第二個服務區域 (第一個是巴西聖保羅)。

幾乎所有主要服務都開台了... 連 AWS Direct Connect 都開 :p

其中兩個主要服務,EC2 的費用與新加坡相同,網路流量部分是亞洲區裡面偏貴的。而 S3 空間費用跟加州一樣貴... 不過講這麼多,用的到的人應該還是會用,畢竟光的速度還是有極限的,建在本地總是有優勢...

接下來會開在俄羅斯嗎?XD