2014-03-04 56 views
0

我有一個運行在tomcat7環境中的基於servlet的應用程序。
此應用程序需要通過多種方式和不同的分類方法(例如面向時間的分類和搜索,關鍵字,標籤,作者等)來訪問這些文件,以這種方式管理用戶的文件。什麼數據庫體系結構是一個很好的選擇這個應用程序?

所以我有一個多維的搜索空間,我需要組織一個基於數據庫的分組系統。

讓我們把重點放在單一和特定的方面。
任何用戶都可以上傳自己的文件。所以我會有一個路徑來保存這些文件。

然後我還需要一個地方存儲與文件相關的信息。
雖然從相關信息(標題,...)中分離文件,然後創建第三個實體是一個小字符串,它可以明確標識信息和文件,但我認爲這很好。
這樣,一旦我知道文件ID,我可以同時獲得信息(存儲在特定文件中)和文件,但是我可以將此ID保存在任何不正確的分類表中,而不需要複製任何重量。
所以,如果我有文件ID(FID),我可以得到文件和信息。當我有例如將一個對象關聯到一個文件時,我可以簡單地將該對象關聯到fid。

然後,任何用戶都必須有自己的表來收集他上傳的文件的variuos fid。 因此,我爲每個用戶都有一張桌子。那麼對於任何其他分類維度,我將有N個表格(其中N是維度的大小)。因此,例如,我想對關鍵字文件進行分類,每個特定鍵盤需要N個表格。 (如果每次我想通過所有用戶文件將關鍵的AGAA文件關聯起來,那麼搜索效率就太低了) 因此,如果我需要顯示與關鍵字「AGAAA」關聯的最近50個文件,我需要一個AGAAA表。等等。

這太瘋狂了。隨着用戶數量的增加,我得到了更多的表。
我聽說mysql數據庫中每個數據庫的表限制。 直到現在我正在使用連接池的MySQL(mariaDB)。 雖然我在不同的數據庫中(也爲了清晰地組織內容)將不同「性質」(即鍵盤,那些時間等等)的表格拆分。但是使用連接池時,我需要在資源定義中聲明數據庫名稱。所以對於不同的數據庫,我需要不同的池。

現在的問題。

  • 使用池我必須爲每個不同的數據庫訪問創建不同的池資源。不是我?
  • 如果是,那麼對所有不同類型的表使用相同的數據庫是否是一個很好的實踐?
  • 如果沒有。如何更改數據庫運行時?
  • 我想我可以用不同的數據庫系統管理不同的表。比如我可以使用SQLite來管理分類表,使用mysql來管理用戶交互等等。這是一個很好的實踐嗎?

  • SQLite通常比多用戶應用程序中的服務器數據庫更快嗎?

  • 我可以使用連接池與SQLite嗎?我的意思是,如果SQLite沒有服務器,SQLite連接是什麼?想想連接池是否有意義?
  • 爲你建議這種問題羣的什麼數據庫架構?

感謝

回答

1

爲什麼每個用戶或關鍵字需要它自己的表?表格可以有很多行。

使用池我必須爲每個 不同的數據庫訪問創建不同的池資源。不是我?

你的問題有多種含義,但通常你爲一個應用程序創建一個池,並且它自己管理。

如果是,是不是所有的 不同類型的表使用相同的數據庫是一個很好的實踐?如果不。如何更改數據庫運行時?

一般人會使用一個數據庫的應用程序。

我想我可以用不同的數據庫管理不同的表格 系統。例如我可以使用SQLite爲了管理 分類表,mysql來管理用戶交互等等。 這是一個很好的實踐嗎?

,你可以,但是這將是瘋狂的。

SQLite通常比多用戶 應用程序中的服務器數據庫更快嗎?

絕對不是。 SQLite一次只能有一個作者,儘管很多讀者都可以。

我可以使用的SQLite連接池?我的意思是,如果SQLite沒有服務器,SQLite 連接是什麼?並且認爲 關於連接池是否有意義?

我不知道,但你不應該使用SQLite,如果你希望多個併發用戶寫/上傳到數據庫。

對於這種 問題,您建議使用哪種數據庫體系結構?

我建議您使用像Apache JackRabbit這樣的內容存儲庫,或像Apache Solr這樣的搜索服務器。

+0

非常感謝您的回覆。 每個「分類鍵」都必須有自己的表格,否則我需要多維表格。事實上,如果我需要爲作者分組文件,我可以創建與任何用戶關聯的每行一個表,然後我需要使用列來存儲有關文件的信息。 – LJSilver

+0

但我需要在創建時指定列大小,所以我有一個上限,每個用戶可轉位的文件。然後,標誌表將隨着用戶和文件的數量而迅速增加。我不認爲這是一個成功的方法。如果我想添加keword分類呢?我添加一個維度。我是否應該搜索整個文件表aech時間查找與密鑰關聯的文件?我不這麼認爲。我認爲有更多的表格更有效率。您認爲這是一種糟糕的做法嗎? 無論如何,我會檢查你的建議,謝謝! – LJSilver

相關問題