2012-05-07 44 views
3

我的任務是找到一個適合即將使用的項目的數據庫。我很難找到一個很好的比賽。我們的應用程序是一個.Net Framework 4.0 C#應用程序。多用戶嵌入式數據庫

首先我看了一下SQLite,但是我遇到了問題,因爲SQLite在寫入期間鎖定它的數據庫文件。

我有2個獨立的應用程序在同一時間運行使用相同的數據庫,我不能確定何時寫一個。我試圖等待鎖釋放,但這導致了一些數據丟失。所以我認爲我會發明一個隊列系統,但是這兩個應用程序都需要使用相同的隊列......所以我認爲我只是做一個單獨的Window服務。所有這些對我來說聽起來都像傳統的RDBMS。

我決定回溯並問自己:「我使用正確的數據庫嗎?」。

有人知道一個數據庫可能符合我的要求嗎?

這是我的要求: 1.易於安裝。這包括沒有單獨的「安裝程序」,用戶必須單獨運行應用程序的安裝。這首先讓我相信我需要一個嵌入式數據庫,但我認爲可能有一些聰明的方式在我們的安裝程序中包含數據庫安裝。

  1. 很難打破。這裏最大的要求是,它應該能夠處理命名管道而不是TCP/IP,以達到安全考慮(或者任何能夠降低人們的系統配置來打破我們的應用程序的能力)。我們的應用程序將始終在同一臺機器上運行。他們需要共享相同的數據庫,因此如果防火牆/安全/「智能用戶」參與其中,使用TCP/IP可能會導致問題。

  2. 對數據庫的長時間運行操作不應該阻止其他用戶讀/寫數據庫。我想過編寫一些代碼來處理這個需求,但仍然使用Sqlite,但決定做更多的功課。

  3. 授權協議:我們希望買東西,我們可以免費再分配費用。我們不希望我們的最終用戶需要爲我們依賴的數據庫購買他們自己的單獨許可證。

  4. 大小限制:我們計劃在這些數據庫中存儲相當多的數據,並且不接受任意限制。我們願意接受操作系統對文件大小施加的限制。 SQLite的大小限制(這是任何Windows機器文件的大小限制)大於2 TB。

  5. 很高興有:可以使用實體框架。

  6. 很高興擁有:關係數據庫。我們可能允許第三方應用程序讀取我們的數據庫,並且不介意它是關係數據庫還是文檔數據庫對象數據庫。但是,我們願意爲滿足我們所有要求的東西做好準備。

數據庫我已經看了迄今: RavenDB SQLite的 CubeSQLite SQL CE

Oracle和Microsoft SQL Server是針對難以再分發許可和那裏。

我明白這些要求是非常嚴格的。我甚至不確定是否有可用的現成解決方案。我很感激任何人都可以提供的幫助。

+2

[Stack Overflow是不是一個推薦引擎(http://meta.stackexchange.com/a/128562/157914) –

+2

謝謝爲反饋。我明白,如果你不想給我一個建議,並理解與建議相關的陷阱。如果有人願意協助,那麼我會很感激。 –

+0

@MikeBynum你能幫我解決你使用的解決方案嗎?如果可能的話源代碼會很好 – Smith

回答

3

您需要使用SQL Server CE 4.0:

  • Xcopy部署
  • 支持加密
  • 自由分發
  • 支持多theading(在你的情況下,多進程)僅因爲版本4.0
  • 支持4千兆位空間
  • 支持EF(偶數CodeFirst)
  • 它的關係,並支持SQL Server T-SQL的一個子集

你有錯誤的誤解,認爲它需要授權:

微軟的SQL Server Compact 4.0是一個免費,嵌入式數據庫軟件開發人員可以使用它來構建ASP.NET網站和Windows桌面應用程序。 SQL Server Compact 4.0佔地面積小,支持在應用程序文件夾中私有部署其二進制文件,在Visual Studio和WebMatrix中輕鬆進行應用程序開發,以及將架構和數據無縫遷移到SQL Server。

Microsoft SQL Server Compact 4.0 (MS download)

除非4GB的是不夠的,你可以使用它。

SQL Server Express也是免費的,具有較少的限制,但需要安裝。

SQL CE和SQL Server的主要區別在於CE不支持Sotred Procedures。但是如果你使用EF,那完全不是問題。

編輯上牌附加信息:

的SQL Server Compact 4.0下再分發許可協議和應用程序開發人員重新分配的SQL Server Compact 4.0可以選擇在SQL Server精簡再分配網站上註冊自由地再分發。註冊將有助於開發人員獲取有關SQL Server Compact關鍵安全補丁和熱修復程序的信息,這些補丁程序可以進一步應用於客戶端安裝。

在donwload頁面底部

+1

感謝JotaBe,我們最關心的SQL CE是它的大小限制,但我們發現WAY比多用戶支持更容易解決這個問題。 –

0

我意識到這是一個老問題,但我目前正在處理幾乎同樣的問題,並在想,如果形勢發生了變化所以這裏去!

從SQLite文檔看來,這似乎是SQLite絕對有可能。

他們明確表示支持在同一臺計算機上進行多進程訪問。只有當您嘗試通過網絡共享SQLite時纔會遇到問題。http://www.sqlite.org/faq.html#q5

這部分內容特別感興趣:「當任何進程想要寫入時,它必須在整個數據庫文件更新期間鎖定整個數據庫文件,但通常只需要幾毫秒,其他進程只是等待寫入器然後繼續完成其業務,其他嵌入式SQL數據庫引擎通常只允許一個進程同時連接到數據庫。「

難道這不是解決問題的辦法嗎?看起來,如果寫入只需要幾毫秒,你基本上可以循環呼叫直到它工作(具有適當的超時和延遲)。

我會去與CE,但我就是喜歡開源太多;)