我有一個運行在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連接是什麼?想想連接池是否有意義?
- 爲你建議這種問題羣的什麼數據庫架構?
感謝
非常感謝您的回覆。 每個「分類鍵」都必須有自己的表格,否則我需要多維表格。事實上,如果我需要爲作者分組文件,我可以創建與任何用戶關聯的每行一個表,然後我需要使用列來存儲有關文件的信息。 – LJSilver
但我需要在創建時指定列大小,所以我有一個上限,每個用戶可轉位的文件。然後,標誌表將隨着用戶和文件的數量而迅速增加。我不認爲這是一個成功的方法。如果我想添加keword分類呢?我添加一個維度。我是否應該搜索整個文件表aech時間查找與密鑰關聯的文件?我不這麼認爲。我認爲有更多的表格更有效率。您認爲這是一種糟糕的做法嗎? 無論如何,我會檢查你的建議,謝謝! – LJSilver