2009-12-06 139 views
6

我寫了一個Windows桌面應用程序,與Sqlite非常好地合作。這是一個單用戶應用程序,數據庫恰好位於應用程序運行的機器上。簡單的多用戶數據庫解決方案

但是,應用程序已經增長,現在多個用戶應該能夠運行應用程序並連接到一個共享數據庫。

我想只能分享網絡驅動器上的sqlite文件,但這顯然會導致數據損壞,除非有人有任何想法。

我想我可以要求安裝數據庫服務器,但商業MySQL許可證沒有意義,PostgreSQL是不同的,我不得不重寫我的許多應用程序。我還沒有與Firebird合作過,所以我不確定這是否是一個好的解決方案。

是否有任何Sqlite數據庫服務器可以安裝處理Sqlite數據庫文件上的傳入事務?

如果我需要客戶端自行下載和安裝MySQL,是否必須要有商業許可證?

任何建議或方向將是偉大的,謝謝。

+0

爲什麼要搬到postgresql導致你重寫了很多你的應用程序,但mysql不會? – warren 2009-12-06 20:25:21

+0

基於過去的Postgresql實驗。但再看看可能不會有什麼傷害,這已經過去了幾年。 – 2009-12-07 08:08:21

+3

一個更新,我給了Postgresql另一個嘗試,而且我實際上已經取得了很多成功。 – 2009-12-07 20:09:29

回答

5

什麼SQL Server Express,它的自由,應該阻止你不必重寫大部分代碼,

+0

向下投票,請留下評論爲什麼這不是一個好的答案? – Rippo 2012-11-15 14:13:13

2

我不知道爲什麼你假設數據文件會被破壞,如果你把它放在一個網絡驅動器上,讓多個應用程序實例同時訪問它。如果你主要閱讀,你應該沒問題。如果你做了很多寫操作,你可能會遇到性能問題,因爲只有一個實例可以同時寫入。 (請參閱http://www.sqlite.org/faq.html

如果您執行了大量寫入操作,您可能需要安裝獨立的服務器 - 是否考慮過MS SQL Server Express?應該是容易和簡單起牀和運行。

+0

Sqlite論壇表示,如果它在FNS文件系統上,它將無法鎖定。 Windows共享我們的SMB而不是NFS是真的,因此不會有問題?如果文件被鎖定,我擔心必須圍繞每個搜索編寫代碼來循環。 – 2009-12-07 17:45:00

8

像你描述的,這取決於底層文件系統您可以使用共享網絡驅動器上SQLite的文件:

http://www.sqlite.org/faq.html#q5

多個進程可以有相同的 數據庫在開放同時。 多個進程可以同時做一個 SELECT。但是,只有一個 進程可以在任何時間對 數據庫進行更改,然而, 。

SQLite使用讀寫器鎖來控制對數據庫的訪問。 (在 WIN95/98/ME不缺乏 讀/寫鎖的支持,概率 模擬代替。)但是,使用 注意:此鎖定機制可能 無法正常工作,如果數據庫 文件保存在NFS文件系統。 這是因爲fcntl()文件鎖定 在很多NFS實現中被破壞。 如果多個 進程可能嘗試同時訪問文件 ,則應避免將SQLite 數據庫文件放在NFS上。在Windows上, 如果您沒有運行 Share.exe守護進程,Microsoft的文檔說明 鎖定可能無法在FAT 文件系統下工作。對Windows有很大的經驗的人們告訴我 網絡文件的文件鎖定是 非常麻煩並且不可靠。如果 他們說的是真的,在兩臺或多臺Windows機器之間共享一個 SQLite數據庫可能會導致 意外問題。

+1

[何時使用](http://www.sqlite.org/whentouse.html)頁面建議不要在有多個用戶/客戶端時直接通過網絡使用SQLite。它指出:「一個很好的經驗法則是,你應該避免在通過網絡文件系統從多臺計算機同時訪問同一數據庫的情況下使用SQLite。」 – 2013-07-18 16:15:10

4

我認爲Firebird可以是一個非常不錯的選擇

  • 它是免費的
  • 嵌入式版本存在
+0

我花了很多時間試圖讓Firebird與我的應用程序一起工作,但最終每一步都遇到了錯誤。爲了瞭解爲什麼我無法創建表格,因爲每次我從常見問題解答中更改某些內容時,我都會遇到新錯誤,必須返回,更改內容,然後再出現其他錯誤。主要基於權限。我不認爲我想與每一位試圖安裝它的客戶都經歷這些挫折。 – 2009-12-07 17:43:24

+0

我不知道你的權限問題,但如果你需要一些好的GUI工具,你可以使用www.upscene.com或www.ibexpert.com(都有免費版本) – 2009-12-07 19:50:28

0

我知道的太晚了,但現在沒有人需要編寫一個沒有提供數據庫抽象框架的應用程序。

我個人使用的Web2py是一個基於python的Web框架。默認情況下,它使用SQLite,它適用於本地桌面上的單用戶應用程序或本地網絡上主要是讀取操作的中小型應用程序。但是,如果我決定增加應用程序使用的範圍,我只需將數據庫模式中的連接字符串更改爲使用其他數據庫。 Web2py或任何其他值得使用的框架只會重寫SQL語句以滿足新的要求。

0

在連接字符串上使用此代碼之後,多用戶可以插入,刪除,選擇e.t.c.在你的數據庫沒有問題。 SQLiteConnection con = new SQLiteConnection(「Data Source = D:\ yourdatabase.db; Count Changes = off; Journal Mode = off; Pooling = true; Cache Size = 10000; Page Size = 4096; Synchronous = off」) ;

0

如果我要求客戶端自行下載和安裝MySQL,是否必須有商業許可證?

一個MySQL商業許可的價值在於,它允許在二進制形式分發標準的MySQL或改性的MySQL而不的oblihation也分發源代碼。它也讓你獲得支持。

但是,如果用戶從Oracle獲得MySQL本身,則GPL沒有義務向您提供MySQL源代碼。他們可以從Oracle獲得。事實上,只要Oracle根據GPL進行分發,Oracle有義務提供。