[英]Improving performance for WRITE operation on Oracle DB in Java
我有一個典型的場景,需要了解最好的解決方法,所以就這樣-
我正在開發一種解決方案,該解決方案將從基於SOAP的遠程Web服務檢索數據,然后將這些數據推送到網絡上的Oracle數據庫。 此外,這將是計划任務,每15分鍾執行一次。
我在遠程服務上擁有事件隊列,該事件隊列包含自上次檢索以來已執行的INSERT / UPDATE / DELETE操作,並且一旦檢索了最近15分鍾的事件,它將再次添加事件以進行下一次檢索。
現在,它只是將數據推送到Oracle,因此我所有的交互都是INSERT&UPDATE語句。
Oracle上大約有60個表,其中一些表有100多個列。 此外,每15分鍾循環大約會有60-70次插入,100 +次更新和10-20次刪除。
這將是一個可執行的jar文件,該文件將在操作后終止,並在下一個15分鍾的周期內再次啟動。
因此,我需要了解如何處理WRITE操作(最佳實踐)以提高整個應用程序的性能?
當前的測試代碼(每個周期)-
感謝幫助 !
如果您一次要插入或更新一行,則可以考慮執行批處理插入或批處理更新。 已經證明,如果嘗試在一定數量后更新或插入行,則會獲得更好的性能。
您正在談論的數據庫操作數(每15分鍾200個)很小,並且很容易在不到15分鍾的時間內完成。 一些具體建議:
您應該分析應用程序,以了解它在哪里花費時間。 如果您不這樣做,那么您將不知道下一步該如何優化,也不知道您所做的某些事情是否對您有所幫助或傷害。
如果可能的話,請嘗試一次將所有事件帶到遠程服務器。
您應該重用與遠程服務的連接(可能是通過使用支持連接持久性和重用的庫)。
您應該通過使用連接池庫來重用數據庫連接,而不是為每個插入/更新/刪除創建新的連接。 信不信由你,建立連接可能需要花費100倍以上的時間,只要擁有連接就可以進行數據庫操作。
您應該考慮在同一事務中執行多個(或全部)數據庫操作,而不是為每條更改的行創建一個新事務。 但是,您應該仔細考慮自己的故障模式,以免丟失任何事件(如果這是一個重要的考慮因素)。
您應該考慮利用准備好的語句緩存。 這可能會有所幫助,但如果正確配置了Oracle,則可能沒有幫助。
您應該考慮嘗試分析您的操作以查找可以一起批處理的任何操作。 如果您有一些經常執行的“熱”操作,則速度會更快。
“我有一個典型的場景”
不,你沒有。 您有一個定制的體系結構,具有唯一的數據模型,唯一的數據和獨特的業務需求。 這不是一件壞事,這是幾乎每個不是現成購買的計算機系統(甚至其中的一些)的狀態。
因此,這是一個實驗,您必須照此進行。 沒有“最佳實踐”。 嘗試各種方法,看看最有效的方法。
“需要了解處理此問題的最佳方法”
通過雇用了解Oracle數據庫的人員,您將極大地提高成功的機會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.