2009-12-27 33 views
0

我正在構建一個web應用程序。這個應用程序將使用MySQL來存儲與每個用戶相關的所有信息。但是,它也會使用MySQL來存儲系統管理員類型的東西,比如錯誤日誌,事件日誌,各種臨時令牌等等。第二組信息可能會比第一組信息大,而且它並不重要。如果我丟失了所有的錯誤日誌,該網站將繼續運行而不會出現呃逆。MySQL數據庫。 Web App有多少?

我撕掉了上是否有多個數據庫,這些不同類型的信息,或東西,這一切到一個單一的數據庫,在多個表中。

將所有內容放在一起的原因是我只需要打開一個連接。我注意到連接打開的時間會受到嚴重損失,特別是使用遠程mysql服務器。

你們是做什麼的?

回答

0

我只會使用一個數據庫 - 主要是出於您提供的原因:您只需要一個連接即可訪問日誌記錄和用戶存儲的數據。

根據您的編程語言,某些框架(J2EE作爲示例)提供連接池。有了兩個數據庫,你需要兩個池。另一方面,在PHP中,建立連接(或兩個連接)時,性能會變得透徹。

2

最前一頁,我必須說,我認爲存儲所有的事件日誌,錯誤日誌中DB是一個非常糟糕的主意,而不是你可能需要將它們存儲在文件系統中。

如果Web應用程序中出現意外情況,您將只需要錯誤日誌或事件日誌。然後你下載文件,並檢查它,這就是所有。無需將其存儲在數據庫中。它會減慢你的數據庫和你的網絡應用程序。

作爲對您問題的回答,如果您確實想要這樣做,您應該將它們分開,並且您應該找到一種方法來保持頁面正常運行,即使事件og和錯誤日誌數據庫已加載並緩慢響應。

+0

我正在使用數據庫進行日誌記錄,因爲它優雅地處理併發。我經常有多個守護進程並行運行,我不必擔心碰撞。 – Tom 2009-12-27 18:57:27

1

有兩個不同的數據庫(一個用於應用程序的「核心」的數據,另一種爲「技術」數據)可能不是一個壞主意,至少如果你希望去你的應用程序有很多用戶:

  • 它會允許你把一臺服務器上的一個數據庫,以及其他DB的第二個服務器
    • 上,你可以想想比例多一點,後來:更多的服務器「核心「數據,仍然只有一個用於」技術「數據- 或相反的
  • 如果「技術」的數據不是很重要,你可以(更容易)有兩個不同的備份流程/政策
  • 具有兩個不同的數據庫,以及兩個獨立的服務器,也意味着你可以對技術數據進行大量計算,而不會影響承載「核心」數據的數據庫服務器 - 這些計算可能對日誌或其他類似數據有用。
    • 作爲一個旁註:如果你不需要那種「報告」計算,可能將這些數據存儲到數據庫是沒有用的,並且文件可以完美地完成?

也許打開兩個連接意味着更多的時間 - 但差異很可能是相當微不足道的,不是嗎?


我工作過幾次上,將使用兩個數據庫應用程序:

  • 一個「主」 /「寫」的數據庫,這將是隻用於寫
  • 和一個「奴隸」數據庫(第一個的複製,幾個從服務器),將被用於讀取

這樣,是的,我們有時會開兩個連接 - 卜一個服務器本身不能處理負載...

+0

我測量了每分貝連接200ms(到遠程mysql服務器)。這對用戶體驗很重要。 – Tom 2009-12-27 18:59:31

+0

200ms連接到遠程服務器?哎喲,這是**很多**!你的服務器有多遠?不是在同一個數據中心,我想? – 2009-12-27 19:02:59

1

無論如何,使用連接池。所以獲得連接的時間不成問題。但如果你有2個連接,交易處理變得更加複雜。另一方面,有時可以有2個連接:在業務事務中出現問題時,可以回滾事務並仍然在管理事務上記錄失敗。但我仍然堅持一個數據庫。

0

我看不出有兩個數據庫的原因。擁有專門用於「技術」和「業務」數據的表格是完全可以接受的,但邏輯上的分離應該足夠了。

物理分離似乎對我來說不是必要的,除非你的意思是應用程序和數據倉庫的星型模式。在這種情況下,它可以是實時更新,或者更典型的是夜間批量ETL。

0

這使得以任何方式是否使用單獨的「datbases」 MySQL的沒有什麼區別,它們僅僅是目錄。

它可以使設置權限更容易,這是做這件事的正當理由。除此之外,它是完全一樣保持在同一個數據庫中的表(除非你可以有幾個表名稱相同......但請不要)

把它們放在不同的服務器上可能是一個好但是,因爲您可能不希望核心關鍵數據(例如用戶信息)與大量不重要的數據混合在一起。對於舊的審計數據,調試日誌等尤其如此。

也可以將短暫的數據(如搜索結果,會話等)放置在不同的服務器上 - 它可能沒有高可用性[1]要求。

話雖如此,如果你不需要做這個,傾倒所有的一臺服務器,其中它更容易管理上(備份,提供高availibilty,管理安全等)。

通常不可能在大於1的服務器上獲取一致的快照數據。這是一個很好的理由只有一個(你關心備份的目的或一個)

[1]的數據中,而不是數據庫。

0

在MySQL,InnoDB的具有存儲在一個文件中特定數據庫的所有的表,或者具有每表中的一個文件的一個選項。

無論如何都建議每個表有一個文件,如果你這樣做,如果你有一個或多個數據庫,它會在數據庫存儲級別上有所不同。

使用連接池,一個或多個數據庫可能不會影響。因此,在我看來,問題是如果你曾經考慮將數據庫的「另一半」分隔到一個單獨的服務器上 - 單獨的服務器可能具有非常不同的硬件配置,比如沒有RAID。如果是這樣,考慮使用單獨的數據庫如果沒有,請使用單個數據庫。

+0

這是非常有趣的信息。這似乎是一個好主意。我一定會配置MySQL將每個表放入它自己的文件中。 – Tom 2009-12-27 22:59:41

+0

參考:http://dev.mysql.com/doc/refman/5.1/en/multiple-tablespaces.html – Nakedible 2009-12-28 00:33:57