2010-02-05 63 views
15

我想將Markdown用於我的網站評論系統,但是我偶然發現了以下問題:我應該在數據庫中存儲什麼 - Markdown中的原始評論,HTML中的解析評論還是兩者?如何存儲Markdown評論

如果用戶需要編輯他的評論,我需要用於查看的HTML版本和Markdown版本。如果我存儲Markdown版本,我必須在運行時解析註釋。如果我存儲了HTML版本,當用戶需要編輯它時(我發現Markdownify但它不完美),我需要將註釋轉換回Markdown。如果我存儲這兩個版本,我將使用的空間加倍。

什麼是最好的選擇?另外,Stack Overflow如何處理這個問題?

+3

*(提示)*在meta.stackoverflow.com上搜索或詢問以瞭解SO如何處理此問題。 – Gordon 2010-02-05 22:03:19

+0

謝謝!我會去做。 – liviucmg 2010-02-06 15:38:28

回答

16

兩者都存儲。它違背了數據庫規範化的規則,但我認爲在這種情況下速度優化是值得的 - 解析大量文本是一個非常緩慢的操作。

您只需要將其存儲兩次,但您可能需要爲其提供數千次服務,因此這是一種時空交換。

+3

爲什麼要存儲解析的版本?在演示文稿端緩存應該否定任何必須將其從數據庫中解析出來的性能影響。 – Chris 2010-02-05 21:47:00

+0

我同意@Mark和@Chris。一方面,存儲便宜。但是,如果您擁有如此大量的數據以至於無法存儲這兩者,那麼您擁有足夠的數據,無論如何您都應該緩存在表示層中,在這種情況下@Chris是正確的。 – 2010-02-05 21:50:55

+0

對於像SO這樣的網站,成千上萬的用戶可以獲得點擊量,包括每天幾乎掃描整個網站的漫遊器,您需要大量的緩存。當然,這可能只有一個內存緩存,沒有數據庫緩存......我不知道你需要多少空間來解決將近500,000個問題......我想象的會非常多。但我明白你的觀點。當然,你應該將頁面和部分頁面緩存在內存中。但是,內存緩存是否使得數據庫緩存完全減少或者兩者都有意義? – 2010-02-05 21:56:10

4

只需在運行時渲染標記爲HTML。

如果您的網站遇到性能問題,那麼Markdown將會是您要調查的最後之一。即使如此,我懷疑這是否合理。

只要看看SO使用的實時JavaScript渲染器。它很快。

編輯: 對不起,我應該已經更清楚了。我的意思是用PHP呈現。你會爲自己節省很多頭痛 - 而且你可能有更多重要的事情需要擔心。

+0

在更復雜的頁面上,我經常不得不等待一兩秒鐘才能完成渲染,以便我可以輸入。你爲什麼認爲他們讓客戶做到這一點,而不是在服務器上做呢?可能是因爲他們不想浪費服務器資源解析文本。 – 2010-02-05 21:58:57

+1

我打算建議用JavaScript代替它。在客戶身上做任何事情都很有意義。客戶越來越快,JavaScript越來越快。這就像免費的分佈式計算。你爲什麼不呢? – 2010-02-05 22:09:47

+6

@Earwicker:搜索引擎不會解釋Javascript,許多普通瀏覽器默認禁用Javascript。我認爲如果JavaScript被禁用,部分禁用高級功能也是可以的,但是我認爲如果他們關閉了JavaScript,那麼顯示人們減價而不是HTML並不是一個好主意。 – 2010-02-05 22:27:29

12

在運行時存儲原始標記和解析。在數據庫中存儲轉換版本時存在一些問題。

  1. 如果用戶需要編輯的評論,你不得不向後轉換解析成原來的降價在數據庫
  2. 空間(總是治隨走,如果你並不需要保存它,不要)
  3. 對降價解析器所做的更改必須在數據庫中的每個註釋上運行,而不是僅在運行時顯示。
+2

3是一個非常好的點,所以+1。但是,如果用戶使用舊版markdown進行了評論,並且對分析器進行了更改,則可能不希望更改自動傳播到所有評論,因爲它可能會破壞某些較早評論的格式。 – 2010-02-06 01:18:05