This page is use UTF-8 encoding. If you cann't see the page contents, Please change the Character Encoding to UTF-8 .

Dovecot 所提出的 mailbox index 的概念

你有否想過電子郵件是一封一封的(如果在 mbox 形式的電郵儲存方式,那電郵是以一個檔案形式把所有郵件存放在一起的,而如果是以 Maildir/ 形式來存放郵件的,那郵件就會以一個檔案一封電郵,而同時存在在幾個不同的檔案目錄內。)而你在 Thunderbird 下卻很容易地看到這有不同的標頭和寄件者,還有收件日期…… 方便你選取信件來閱讀。

這一種顯示方法,我們就把它稱作 Mailbox Index 。其實如果你指細地想一想如果電郵伺服器能在你一開始閱讀郵件的時候就能以一種快速的方法來把這些 index 提供給你的話,你會一定會十分開心的。

只以這方面的發展, Dovecot 已可以在電郵接收伺服器的發展歷史上記上一個大功。也許未來 mailbox index 會是接收伺服器的標準功能也說不定。

沒有 mailbox index 的痛苦

不知你有沒有試過在網絡連線十分慢的情況下開啟你的電郵信箱,而內中又有過千封電郵的經驗。如果你有過這樣的經驗的話,你一定會同意我所說,那經驗就像是在決定今天要不要進行這無止境的等。

早期我剛到電腦公司上班,就不高興就是這一種等。如果星期一,那等更是精神上的一大歷練。(加上如果你知道當中有三分二是無用的垃圾電郵的話。)

mailbox index 的理念

mailbox index 的理念。 mailbox index 我想應是 dovecot 所提倡的。(起碼它是做得最好的。)這就是在不同的 mail folder 下建下一些特別的檔案。如下︰

...
./.INBOX
./.INBOX/.imap.index
./.INBOX/.imap.index.data
./.INBOX/.imap.index.tree
./.INBOX/.imap.index.log
...

這些檔案的目的就是記錄著電郵信箱內不同的電郵所含有的不同標頭資料,把它加以放好在一些檔案內。就算你的電郵信箱有過千封信件,它們內中的資料也是分別放好在這些檔案下。因此當你的電郵客戶端連接電郵伺服器,而要求目錄 ( index ) 服務的時候,它就是可以立即地從這些檔案中把信件的資料報告給客戶端。而不需要每次都到電郵信箱內尋找每一封信件再把 index 匯報出來,這當然會加快電郵接收伺服器匯報的時間。

一次 nfs 下的測試

其實為什麼會把這個 mailbox index 特別拿來一談。主要原因是一次在 nfs 下的測試!要了解為什麼要做這樣的測試,首先要了解 samba.hk 現在的網絡結構。在今天年初因為要準備 www.godclick.net 和 www.openworkshop.org 的需要,所以把協會的兩台伺服器由兩台增到四台。(其實也在準備第五台伺服器。)而且開始把不同的服務分配到不同的伺服器下來工作,作更仔細的協作和分工。希望能加快協會伺服器的回應時間!但是四台伺服器或五台伺服器的備份工作一定比一台伺服器來得複雜。在有限的人手資源要作出這樣的管理絕非易事。因此在建立網絡的初期就準備了一台 nfs 伺服器,以作網絡硬碟之用。這樣的設計也可以簡化了備份的工作。

但是一個平價的網絡硬碟機最大的問題是不是所有的伺服服務都是 nfs 友善的。 另一方面就是網絡硬碟的 I/O 速度!這是最大的考驗。

在 courier-imap 和 dovecot 在這情況下的比較,明顯地 dovecot 勝出了。最主要勝出的原因就是 mailbox index 上。因為 dovecot 的 mailbox index ,容許把它和 mail storage 分開不同的地方放置。因此網絡的管理者可以把 dovecot 的 mailbox index 放置在 I/O 較快的本地電腦上,而另外把重要的電郵信件放到 I/O 速度較慢的網絡磁碟機上。

這也讓使用者在閱讀有用的信件時才使用網絡磁碟機,也可以使到網絡磁碟機處乎一個更優化的狀態。(其實很多在信箱也是 plain-text ,另外也許有三分一是不會看的信件。所以有效地使用 mailbox index ,確可以令接收伺服器處於一個更好的狀況。)

samba.hk 接收伺服器上的設定

default_mail_env = maildir:./:INDEX=/var/indexes/%u

這裡會把使用者的 indexes 存放在 file:///var/indexes 的檔案目錄內。如 frankie@godclick.net 的電郵地址,它所存放的地方就在 file:///var/indexes/frankie@godclick.net 的檔案目錄內。

還記如何使用 dovecot 來管理 virtual mailbox 吧!如果忘記了,請你查看這一份文件Email/DovecotVirtualMailBox 吧。它講解了如何使用一個 glabel uid 和 gid 來管理電郵信箱(這裡使用了 65533 的 uid 和 65533 的 gid 來管理它。),當然那 INDEX 也會使用相同的 uid 和 gid 來建立的,所以也是相同的使用者和使用者群組。

你可以用以下的指令來建立這一個檔案目錄。

# mkdir /var/indexes
# chown 65533:65533 /var/indexes
#


ChineseSupport

ChineseSupport/DovecotMailBoxIndex (last edited 2005-03-27 23:54:27 by FrankieChow)