簡體   English   中英

哪種數據庫體系結構適合該應用程序?

[英]what database architecture is a good choiche for this application?

我有一個在Tomcat7環境中運行的基於Servlet的應用程序。
此應用程序需要以這樣的方式來管理用戶文件:可以通過多種方式並通過不同的分類方法(例如,面向時間的分類和搜索,關鍵字,標簽,作者等)來訪問這些文件。

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

讓我們專注於一個特定的方面。
任何用戶都可以上傳自己的文件。 因此,我將在其中保存這些文件的路徑。

然后,我還需要一個存放與文件關聯的信息的地方。
我雖然最好將文件與關聯的信息(標題,...)分開,然后創建第三個實體,該實體是一個小的字符串,可以唯一地標識信息和文件。
這樣,一旦我知道了文件ID,就可以同時獲取信息(存儲在特定文件中)和文件,但是我可以將此ID保存在任何不正確的分類表中,而無需復制任何內容。
因此,如果我具有文件ID(FID),則可以獲取文件和信息。 例如,當我必須將一個對象與文件關聯時,我可以簡單地將該對象與fid關聯。

然后,任何用戶都必須擁有自己的表,該表可以收集他上傳的文件的各種信息。 因此,我為每個用戶都有一張桌子。 然后,對於任何其他分類維,我將有N個表(其中N是維的大小)。 因此,例如,我想為關鍵字分類文件,每個特定鍵盤需要N個表。 (每次我想要通過所有用戶文件與鍵AGAA關聯的文件時搜索效率都太低)。因此,如果需要顯示與關鍵字“ AGAAA”關聯的50個以上的最新文件,則需要一個AGAAA表。 等等。

這太瘋狂了。 隨着用戶數量的增加,我得到的表越來越多。
我聽說了mysql數據庫中每個數據庫的表限制。 到目前為止,我使用帶有連接池的mysql(mariaDB)。 我雖然在不同的數據庫中拆分了不同“性質”的表(即鍵盤的表,時間的表等)(也是為了清楚地組織內容)。 但是對於連接池,我需要在資源定義中聲明數據庫名稱。 因此對於不同的數據庫,我將需要不同的池。

現在提問。

  • 使用池,我必須為每個不同的數據庫訪問創建一個不同的池資源。 是不是我?
  • 如果是,對所有不同種類的表使用相同的數據庫是否是一個好習慣?
  • 如果不。 如何更改數據庫運行時?
  • 我以為可以用不同的數據庫系統管理不同的表。 例如,我可以使用SQLite來管理分類表,使用mysql來管理用戶交互等等。 這是一個好習慣嗎?

  • 在多用戶應用程序中,SQLite通常是否比基於服務器的數據庫快?

  • 我可以在SQLite中使用連接池嗎? 我的意思是,如果SQLite沒有服務器,則SQLite連接是什么? 考慮連接池是否有意義?
  • 對於這種問題,您建議使用哪種數據庫體系結構?

謝謝

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

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

您的問題有多種含義,但通常您為一個應用程序創建一個池,並由其自行​​管理。

如果是,對所有不同種類的表使用相同的數據庫是否是一個好習慣? 如果不。 如何更改數據庫運行時?

通常,一個應用程序將使用一個數據庫。

我以為可以用不同的數據庫系統管理不同的表。 例如,我可以使用SQLite來管理分類表,使用mysql來管理用戶交互等等。 這是一個好習慣嗎?

您可以,但是那太瘋狂了。

在多用戶應用程序中,SQLite通常是否比基於服務器的數據庫快?

絕對不。 SQLite一次只能有一位作者,盡管對許多讀者來說很好。

我可以在SQLite中使用連接池嗎? 我的意思是,如果SQLite沒有服務器,則SQLite連接是什么? 考慮連接池是否有意義?

我不知道,但是如果期望多個並發用戶寫入/上傳到數據庫,則不應使用SQLite。

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

我建議您使用內容存儲庫(如Apache JackRabbit)或搜索服務器(如Apache Solr)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM