簡體   English   中英

數據庫數據過濾最佳實踐

[英]Database Data Filtering Best Practice

我目前正在使用原始JDBC查詢MySql數據庫中的記錄; 最終結果集中的每個記錄都將最終提取出來,放在特定於域的模型中,並存儲到列表實例中。

我的查詢是:在需要進一步過濾數據的情況下(偶然地基於SAME表中存在的列),以下哪種方法通常被認為是最佳實踐:

1.向數據庫發出更多的WHERE子句調用。 這將有效地將篩選過程轉移到數據庫,但顯然會導致一個或多個附加查詢(連續應用多個過濾器)。

2.在應用程序級別上明確過濾上述預處理列表,因此無需每次過濾記錄時都必須對數據庫進行其他調用。

3.以上兩種方法的某種混合組合,也許其中所有篩選操作最初都是由數據庫服務器執行的,然后將其預處理為特定於應用程序的模型,然后隱式緩存到某個有限時間的集合中。 然后,將根據緩存中存儲的數據為在此時間間隔內接收到的其他過濾器查詢提供服務。

重要的是要注意,在這種情況下,數據庫服務器實際上位於外部計算機上,因此在本地網絡中最終選擇采用的方法也必須考慮通過本地網絡發送查詢流量的開銷和延遲。

我很清楚地知道古老的口頭禪規定:“應該使用數據庫服務器來做自己擅長的事情。” 但是,在這種情況下,似乎要向數據庫中進行無數次調用來篩選我已經在應用程序級別上擁有的數據似乎還不夠。

您的想法和見解將不勝感激。

我已經在許多應用程序中使用了混合方法,效果很好。

數據庫過濾特別適用於索引的列。 由於減少了發送到應用程序的行,因此減少了網絡開銷。

對於某些列,數據庫篩選實際上可能會很慢,具體取決於結果中的行數和索引的缺乏。 與數據庫查詢時間相比,網絡開銷可以忽略不計,因此在這種情況下應用程序篩選可能會更快。

我還發現,使用Java進行應用程序篩選比編寫復雜的SQL更容易編寫和理解。

我通常手動進行實驗,以在合理的時間內使用普通SQL獲得最少的行。 然后編寫Java以精煉到所需的行。

我首先欣賞這個問題...幾天前我也面臨類似的情況...您已經討論了所有可用的選項,我更喜歡第二個選項....我的意思是在應用程序級別進行處理,而不是在數據庫中進行過濾水平。

暫無
暫無

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

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