Re: [技術] 有沒有ptt這個bbs實作細節的八卦

看板Soft_Job作者 (自立而後立人)時間10年前 (2013/10/28 12:14), 編輯推噓17(17084)
留言101則, 21人參與, 最新討論串2/3 (看更多)
※ 引述《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
FILE IO 不一定比DB IO 快, 現在有RAW DEVICE/ASM 了.
10/28 12:31, 1F

10/28 12:39, , 2F
其實一頁是可以超過 20 筆的 XD
10/28 12:39, 2F

10/28 12:43, , 3F
推一下
10/28 12:43, 3F

10/28 12:45, , 4F
用 terminal 看一頁可以有兩倍以上XD
10/28 12:45, 4F

10/28 13:12, , 5F
@Lordaeron 感謝補充~ XD
10/28 13:12, 5F

10/28 13:13, , 6F
@Bencrie 設定終端機列數就行了 不過這邊是舉例啦 XD
10/28 13:13, 6F

10/28 13:17, , 7F
講到這個,之前有看到 MMDB 相關的訊息,還沒機會測測看效能
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
真的要快可以實作專用的 File System ....
10/28 13:49, 9F

10/28 14:33, , 10F
ASM/RAW DEVICE 就比FS 快了, 快一倍了.
10/28 14:33, 10F

10/28 14:34, , 11F
G 一下: Oracle IO Performance - Maklee
10/28 14:34, 11F

10/28 15:27, , 12F
那 struct 真的是噩夢,升級或改欄位都要關站轉XD
10/28 15:27, 12F

10/28 15:27, , 13F
每次弄這心跳都爆衝
10/28 15:27, 13F

10/28 15:32, , 14F
我記得 ptt 程式有一個特性就是記憶體cache吃很大
10/28 15:32, 14F

10/28 15:38, , 15F
像是小天使, 看版資料這些表都是做成 daemon
10/28 15:38, 15F

10/28 15:38, , 16F
每個 client 就用 socket 去找他讀資料
10/28 15:38, 16F

10/28 15:39, , 17F
10/28 15:39, 17F

10/28 15:45, , 18F
@ccpz 我懂 XDDDD
10/28 15:45, 18F

10/28 15:47, , 19F
不就是很基礎的東西而已, 書本上全都有的.
10/28 15:47, 19F

10/28 16:54, , 20F
哪一本啊 我找機會去買來看看~ XD
10/28 16:54, 20F

10/28 21:32, , 21F
哪一本DS/ALGO 的沒講呢?
10/28 21:32, 21F

10/28 21:32, , 22F
你想抄CODE 哪是沒有的.
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
想起以前lab的search engine搞的index..唉
10/28 23:50, 25F

10/29 00:09, , 26F
說起來以前天天在碰到石頭文的久遠記憶…
10/29 00:09, 26F

10/29 00:50, , 27F
這篇把bbs實作的細節講的蠻清楚的 推一個
10/29 00:50, 27F

10/29 02:55, , 28F
那語氣我也覺得不太舒服= =
10/29 02:55, 28F

10/29 07:19, , 29F
所以呢? 做CACHE 需要什麼DS/ALGO? 書上找不到的?
10/29 07:19, 29F

10/29 07:20, , 30F
要講語氣, 還是拿點實力出來吧. 語氣呢.
10/29 07:20, 30F

10/29 07:26, , 31F
就是WEB 的FORUM,也還是有使用FILE + DB 混合的.
10/29 07:26, 31F

10/29 07:27, , 32F
只是"方便?",或很多人不懂,所壓根沒有DB以外的想法而已.
10/29 07:27, 32F

10/29 07:30, , 33F
各種作法,都有其限制,例如DB的作法,就受到FIELD 長度的
10/29 07:30, 33F

10/29 07:31, , 34F
的限制,就變成字數的限制了. 有人一定會說BLOB的, 他自
10/29 07:31, 34F

10/29 07:31, , 35F
已玩一下吧.
10/29 07:31, 35F

10/29 09:19, , 36F
FILE + DB 挺好玩的,只是... 好麻煩...= ="
10/29 09:19, 36F

10/29 09:48, , 37F
L大花了這麼多行也沒多發表什麼,枉費作者拋磚引玉
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
已經討論過得議題而已。像是把 db 建在 memory (MMDB),也不
10/29 14:08, 63F

10/29 14:08, , 64F
只是把 memory mount 成 file system 這麼簡單,還要考慮資
10/29 14:08, 64F

10/29 14:09, , 65F
料會不會因為斷電等問題而產生 data lost 。
10/29 14:09, 65F

10/29 14:09, , 66F
這些整體的觀念是我在確認/探討的。
10/29 14:09, 66F

10/29 14:15, , 67F
我已經沒問你什麼了啊,這些議題我覺得自己 survey 就好了,
10/29 14:15, 67F

10/29 14:15, , 68F
反正做一次就會知道他該怎麼運作跟可能的問題、限制在哪了。
10/29 14:15, 68F

10/29 14:19, , 69F
將RAM mount 成FS 會快一些, 但不會比將TABLE CACHE 住
10/29 14:19, 69F

10/29 14:20, , 70F
快, 而既然是 RD vs FS 還有什麼好比風險?
10/29 14:20, 70F

10/29 14:23, , 71F
「我」不知道,或許有、或許沒有。XD
10/29 14:23, 71F

10/29 14:24, , 72F
我的話應該直覺會考慮的是 backup issue,不過要 survey 才
10/29 14:24, 72F

10/29 14:24, , 73F
知道全貌。
10/29 14:24, 73F

10/29 15:15, , 74F
backup issue? N家做得產品出來, 你還操心?
10/29 15:15, 74F

10/29 15:19, , 75F
我沒有在擔心,我只是在想該怎麼做,這就是研究...-_-
10/29 15:19, 75F

10/29 18:25, , 76F
T大的修養是怎麼養成的? 是先天個性就這樣還是後天磨出來的?
10/29 18:25, 76F

10/29 20:27, , 77F
@leonz 我個性其實還蠻火爆的啦 XD
10/29 20:27, 77F

10/30 00:55, , 78F
T大蠻火爆的....
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
ASM是單指x86的?還是MIPS的?ARM的?8051的?PIC的?ASM很多種啊
10/30 10:17, 81F

10/30 10:38, , 82F
Lordaeron 這些話的既視感好明顯,先說我投降,我只聽過 raw
10/30 10:38, 82F

10/30 10:39, , 83F
device ,但沒聽過 db 可以直接讀寫 raw device 加速。 XD
10/30 10:39, 83F

10/30 10:39, , 84F
這部份我也覺得蠻值得去看看的~感謝
10/30 10:39, 84F

10/30 12:43, , 85F
人家講DB, 結果有人亂入扯去ASSEMBLY.
10/30 12:43, 85F

10/30 12:44, , 86F
知知是知知, 不知是不知, 亂扯一通, 只會討打.
10/30 12:44, 86F

10/30 13:41, , 87F
等你來教的詳細點啊 XD
10/30 13:41, 87F

10/30 16:02, , 88F
你付錢, 我來教, 沒問題的啊. 要付我就開價.
10/30 16:02, 88F

10/31 00:37, , 89F
科科,樓上你不懂組語我可以教你啊~ASM只能是DB的ASM?
10/31 00:37, 89F

10/31 01:17, , 90F
討打的題外話,L就是自己講的強出頭啊
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
科科~我論coding能力與出生早晚之絕對關係!? 哈哈哈哈
10/31 10:10, 93F

10/31 10:36, , 94F
哈...coding能力絕對等於邏輯好壞, 一個人連別人講什麼
10/31 10:36, 94F

10/31 10:37, , 95F
都不知還自以為自己多強的亂入, 就明白, coding能
10/31 10:37, 95F

10/31 10:37, , 96F
力不怎麼樣了. asm 呢, Mips 呢. coding 能力呢.
10/31 10:37, 96F

10/31 10:38, , 97F
快拿出你的CODING 能力出來SHOW 看看吧.
10/31 10:38, 97F

10/31 10:48, , 98F
這樣都能戰起來?
10/31 10:48, 98F

10/31 10:56, , 99F
就無聊嘛, 我還想看到這位強人去參加一下64k intro呢
10/31 10:56, 99F

10/31 10:56, , 100F
看他的assembly 有多強.
10/31 10:56, 100F

10/31 13:52, , 101F
看看是誰先嗆出生囉~討論程式嗆出生了沒...這邏輯果然強~哈
10/31 13:52, 101F
文章代碼(AID): #1IRUImz8 (Soft_Job)
文章代碼(AID): #1IRUImz8 (Soft_Job)