Re: [技術] 有沒有ptt這個bbs實作細節的八卦
※ 引述《AzureCoder (AzureCoder)》之銘言:
: 到底ptt實作是使用什麼語言和結構,用的是什麼database
: 特別每次用文章搜尋功能時,對那速度都感到驚嘆
: 現在很多網上的論壇討論區規模很多沒ptt大,但搜尋功能很多都比ptt慢很多
: 到底為什麼ptt用夠做到
這個問題多年前我研究過。Orz
還跑去架了 itoc 來玩,現在站還活著。(telnet://tonyq.org )
先講結論:他會快是用別的東西換來的。
主流的 BBS 實作資料目錄結構多是 File System 為主的,
每個看板就是一個資料夾,資料夾內會有該看板所有文章,
每篇會用一個代碼去存。
像這篇網址上的 id 應該就是他的 hash 。XD
http://www.ptt.cc/bbs/Soft_Job/M.1382884767.A.AFA.html
對於內文本身就是當成純文字檔案。
而看板列表,當然不會是弄個 database 去做 query 這種作法,
那是沒辦法達到這種效率跟速度的。
看板列表是直接把所有版面上的檔案清單,
直接用固定的 struct 寫成 index file。(.DIR)
struct 在這種狀況效能真的是快到一個習慣用 database 的人無法想像的程度,
但被空間限制也是麻煩到一個無法想像的程度。
光是你想讓標題多紀錄一個字或少紀錄一個字,就得整個索引檔重建,
全站的檔案何其多,光 rebuild 應該就會整死人,
基本上你不會想在 index 一直亂加有的沒的。
以前各大 bbs 出現索引檔損壞而導致使用者發生問題的狀況也時有耳聞。
另外一點, ptt 只能做特定看板的條件搜尋,
所以換言之,他只要掃一遍看板的索引檔就能做完 search 。
會快是當然的,而且 file io 基本上比 database 快上好幾倍。
而且還是一頁最多 20 筆的 pagination , web 哪有一頁 20 筆這種事。XD
一般網站的 search 基本上都不會只做標題搜尋,這是一個問題,
剩下的完全就是 db 硬要對上 tune file IO 索引,
兩者的效能差距就是這麼大。
所以網站要快通常都是打 cache 把 db access 變成 file access 。
然後 bbs 搜尋並不算快,如果有人知道所謂「暴力恐龍搜尋」,
他的速度拿到一般 web 搜尋各大論壇的 search engine 來比,就會大輸不少。
這只是剛好 best case 打贏人家而已。XD
另一方面是 telnet 本身 stateful 跟 web state less 的傳輸瓶頸,
但代價是 bbs 會斷線需要重頭來,web 斷線多按幾次重新整理就好。
然後 bbs 用 file base 也有一些好處,他有機會做到,
把不同字母開頭的看板 mount 到不同硬碟,來搶出更多的 IO 效能。
--
這幾年來考慮到推文管理,也有一些站實驗性的將 database 導入 bbs 的計畫。
然後 file IO 雖說效能快,但同時 IO 到一定程度之後,還是很可怕。
巴哈姆特當初為了超過四千人數,還有挑戰過做多站的水平 scale ,
結果產生出一堆壯文後來似乎是放棄了。
ptt 能承載到十幾萬人這點才是他的技術內涵,
最近一兩年推出的資源回收桶機制也是很有趣的,我一直都想讀但還沒去追細節。XD
前面那些實驗最後結果如何,我大多沒有跟到,
我想這裡應該還有些人知道,就寫來拋磚引玉。XD
--
Life's a struggle but beautiful.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.137.246.106
※ 編輯: TonyQ 來自: 220.137.246.106 (10/28 12:15)
※ 編輯: TonyQ 來自: 220.137.246.106 (10/28 12:15)
※ 編輯: TonyQ 來自: 220.137.246.106 (10/28 12:16)
※ 編輯: TonyQ 來自: 220.137.246.106 (10/28 12:20)
※ 編輯: TonyQ 來自: 220.137.246.106 (10/28 12:20)
→
10/28 12:31, , 1F
10/28 12:31, 1F
推
10/28 12:39, , 2F
10/28 12:39, 2F
推
10/28 12:43, , 3F
10/28 12:43, 3F
推
10/28 12:45, , 4F
10/28 12:45, 4F
→
10/28 13:12, , 5F
10/28 13:12, 5F
→
10/28 13:13, , 6F
10/28 13:13, 6F
→
10/28 13:17, , 7F
10/28 13:17, 7F
→
10/28 13:17, , 8F
10/28 13:17, 8F
※ 編輯: TonyQ 來自: 220.137.246.106 (10/28 13:18)
推
10/28 13:49, , 9F
10/28 13:49, 9F
→
10/28 14:33, , 10F
10/28 14:33, 10F
→
10/28 14:34, , 11F
10/28 14:34, 11F
推
10/28 15:27, , 12F
10/28 15:27, 12F
→
10/28 15:27, , 13F
10/28 15:27, 13F
推
10/28 15:32, , 14F
10/28 15:32, 14F
推
10/28 15:38, , 15F
10/28 15:38, 15F
→
10/28 15:38, , 16F
10/28 15:38, 16F
→
10/28 15:39, , 17F
10/28 15:39, 17F
→
10/28 15:45, , 18F
10/28 15:45, 18F
→
10/28 15:47, , 19F
10/28 15:47, 19F
→
10/28 16:54, , 20F
10/28 16:54, 20F
→
10/28 21:32, , 21F
10/28 21:32, 21F
→
10/28 21:32, , 22F
10/28 21:32, 22F
推
10/28 22:45, , 23F
10/28 22:45, 23F
→
10/28 23:16, , 24F
10/28 23:16, 24F
推
10/28 23:50, , 25F
10/28 23:50, 25F
推
10/29 00:09, , 26F
10/29 00:09, 26F
推
10/29 00:50, , 27F
10/29 00:50, 27F
推
10/29 02:55, , 28F
10/29 02:55, 28F
→
10/29 07:19, , 29F
10/29 07:19, 29F
→
10/29 07:20, , 30F
10/29 07:20, 30F
→
10/29 07:26, , 31F
10/29 07:26, 31F
→
10/29 07:27, , 32F
10/29 07:27, 32F
→
10/29 07:30, , 33F
10/29 07:30, 33F
→
10/29 07:31, , 34F
10/29 07:31, 34F
→
10/29 07:31, , 35F
10/29 07:31, 35F
→
10/29 09:19, , 36F
10/29 09:19, 36F
推
10/29 09:48, , 37F
10/29 09:48, 37F
→
10/29 10:09, , 38F
10/29 10:09, 38F
還有 23 則推文
→
10/29 14:08, , 62F
10/29 14:08, 62F
→
10/29 14:08, , 63F
10/29 14:08, 63F
→
10/29 14:08, , 64F
10/29 14:08, 64F
→
10/29 14:09, , 65F
10/29 14:09, 65F
→
10/29 14:09, , 66F
10/29 14:09, 66F
→
10/29 14:15, , 67F
10/29 14:15, 67F
→
10/29 14:15, , 68F
10/29 14:15, 68F
→
10/29 14:19, , 69F
10/29 14:19, 69F
→
10/29 14:20, , 70F
10/29 14:20, 70F
→
10/29 14:23, , 71F
10/29 14:23, 71F
→
10/29 14:24, , 72F
10/29 14:24, 72F
→
10/29 14:24, , 73F
10/29 14:24, 73F
→
10/29 15:15, , 74F
10/29 15:15, 74F
→
10/29 15:19, , 75F
10/29 15:19, 75F
→
10/29 18:25, , 76F
10/29 18:25, 76F
→
10/29 20:27, , 77F
10/29 20:27, 77F
→
10/30 00:55, , 78F
10/30 00:55, 78F
→
10/30 07:11, , 79F
10/30 07:11, 79F
→
10/30 07:13, , 80F
10/30 07:13, 80F
→
10/30 10:17, , 81F
10/30 10:17, 81F
→
10/30 10:38, , 82F
10/30 10:38, 82F
→
10/30 10:39, , 83F
10/30 10:39, 83F
→
10/30 10:39, , 84F
10/30 10:39, 84F
→
10/30 12:43, , 85F
10/30 12:43, 85F
→
10/30 12:44, , 86F
10/30 12:44, 86F
→
10/30 13:41, , 87F
10/30 13:41, 87F
→
10/30 16:02, , 88F
10/30 16:02, 88F
→
10/31 00:37, , 89F
10/31 00:37, 89F
推
10/31 01:17, , 90F
10/31 01:17, 90F
→
10/31 09:13, , 91F
10/31 09:13, 91F
→
10/31 09:14, , 92F
10/31 09:14, 92F
→
10/31 10:10, , 93F
10/31 10:10, 93F
→
10/31 10:36, , 94F
10/31 10:36, 94F
→
10/31 10:37, , 95F
10/31 10:37, 95F
→
10/31 10:37, , 96F
10/31 10:37, 96F
→
10/31 10:38, , 97F
10/31 10:38, 97F
推
10/31 10:48, , 98F
10/31 10:48, 98F
→
10/31 10:56, , 99F
10/31 10:56, 99F
→
10/31 10:56, , 100F
10/31 10:56, 100F
→
10/31 13:52, , 101F
10/31 13:52, 101F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):