2009-11-05 81 views
1

我正在研究從不同文件讀寫數據的Java桌面應用程序。我認爲更好的解決方案是用SQLite數據庫替換文件系統。 遷移到此係統並在我的應用程序中嵌入數據庫有多難?有真正的表現收益嗎? 非常感謝SQLite,Derby與文件系統

+0

如果沒有關於你在做什麼的更多細節,難以說出你的難處。有一個使用文件存儲配置的應用程序與構建整個相冊應用程序並將所有照片作爲文件存在很大的區別。 –

回答

7

我不認爲只需將數據存儲更改爲SQLite即可獲得性能。您應該將基於FS的存儲遷移到關係(SQL)數據庫存儲。

  • 您需要原子操作。 - 您的應用可能隨時崩潰,而且您不必擔心損壞的數據)
  • 您需要異步操作。 - 您的應用程序的多個實例可以同時修改數據而不會破壞數據/獲取無效狀態。
  • 您需要數據規範化。 - 產品-m2m->目錄
  • 自動索引 - 如果您需要快速的搜索功能(如果你的文件系統是不是已經足夠快)
  • 您需要複雜的數據運算的抽象。 - 即SELECT SUM(價格)在價格< 10和喜歡

這些都是一些你切換到SQLite的獲得的收益。

如果您還正確使用了一個或多個上述關係存儲屬性(您沒有使用基於文件的系統),則可以從SQLite中獲得性能提升。

2

我不認爲你會在任何標準桌面上獲得顯着的性能提升 - 只要你的應用程序沒有別的什麼,只是用讀寫來折磨文件系統:)最後,性能主要取決於你的代碼。

如果你考慮切換到SQLite,你可能想看看SQLJet, a pure Java implementation of SQLite。我自己並沒有使用它,但我認爲部署它應該與Derby類似:您需要的只是添加一些Jars到您的應用程序中,然後解決。我會盡量避免使用外部SQLite(或任何其他對外部應用程序的依賴),因爲它會使應用程序的設置複雜化。

1

將Derby嵌入Java桌面應用程序非常簡單。您只需將Derby jar添加到您的應用程序,決定要將數據存儲在磁盤上的位置,然後編寫標準SQL和JDBC調用來調用Derby操作。編寫良好的Derby應用程序可以提供極高的性能,但您必須注意您的架構和事務設計。德比擁有分析和解決性能問題的好工具。