[英]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來管理分類表,使用mysql來管理用戶交互等等。 這是一個好習慣嗎?
您可以,但是那太瘋狂了。
在多用戶應用程序中,SQLite通常是否比基於服務器的數據庫快?
絕對不。 SQLite一次只能有一位作者,盡管對許多讀者來說很好。
我可以在SQLite中使用連接池嗎? 我的意思是,如果SQLite沒有服務器,則SQLite連接是什么? 考慮連接池是否有意義?
我不知道,但是如果期望多個並發用戶寫入/上傳到數據庫,則不應使用SQLite。
對於這種問題,您建議使用哪種數據庫體系結構?
我建議您使用內容存儲庫(如Apache JackRabbit)或搜索服務器(如Apache Solr)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.