我目前正在開發一個我們想要開發的應用程序的C#項目。我們正在就用戶之間共享數據的問題進行頭腦風暴。我們希望能夠指定一個文件夾,其中應用程序的所有文件將被保存,並且我們希望能夠將它們保存在共享文件夾(服務器,不同的PC或Mac,Nas等)上。 )。在服務器上沒有數據庫的共享網絡上的數據應用程序體系結構
部署會像這樣:第一臺PC上
- 安裝,我們選擇一個網絡驅動器,共享,任何創造的所有文件在此位置的應用程序。
- 在我們安裝的應用程序,我們選擇了相同的位置(在網絡上)的第二臺PC,應用程序不會產生任何東西,它認爲它已經存在,它使用這些文件作爲應用程序的數據
- 同在其他客戶端上的東西
應用程序的文件將成爲文檔(最有可能的XML格式的文檔),當打開應用程序時,我們要顯示所有現有的文檔。問題是,我們不僅希望獲得文檔列表並能夠編輯它們的內容,還希望能夠編輯文檔的屬性,所以我們想要一個文件(Sqlite, XML,無論什麼)表示所有文檔及其屬性的列表。地址列表同樣的東西。
我知道所有與數據庫解決方案完全一樣的客戶端/服務器,但這種解決方案是不可能的。我首先在查看數據文件的SQLite,但我知道併發性可能是一個真正的問題,並且文件鎖定效果不佳。問題是,我會遇到與簡單的XML文件相同的問題(在多個用戶正在工作時刷新內容,訪問鎖定的文件)。
所以我想我最後的問題是:它是否可行?有沒有其他方法可以讓我們更輕鬆地做到這一點?
編輯:
好的,我不迴應每一個崗位或評論,因爲我目前使用SQLite測試併發。我做了什麼,如果我測試這種方式是錯誤的,請糾正我,是啓動X BackgroundWorker,它們都將在示例數據庫中插入記錄(每次啓動應用程序時都會重新創建)。我嘗試通過這些背景工作者在數據庫中啓動100次INSERT迭代。
當然,併發性正在運行一個應用程序,它只是等待最後一個BackgroundWorker完成它的工作,然後寫下一個記錄。我也嘗試在幾乎同一時間插入,這意味着我在每個等待模5時間戳(每5秒鐘,每個BackgroundWorker運行)的BackgroundWorker中放置一個循環。再次,它正在等待上一個插入查詢在下一個之前結束,一切工作正常。我甚至用500個BackgroundWorkers試了一下,效果很好。
然後我嘗試多次啓動我的應用程序並同時運行它們。當我這樣做時,確實有一些問題。有兩個我的應用程序的實例仍然正常工作,但是當它用4-5個實例進行嘗試時,它確實有問題,並且出現了兩種類型的錯誤:1.數據庫被鎖定2.磁盤I/O故障。但是大多數鎖定的數據庫。
我做的事情非常密集,在我的應用程序的場景中,它永遠不會遇到5個進程,試圖同時插入500個hunded行(也許我會得到兩個或三個連接的併發)。但是真正困擾我的是什麼讓我認爲我的測試方法不是一個好的方法,那就是我遇到了這些錯誤,試圖在共享網絡上,NAS上以及我自己的硬盤上工作。每次它可能爲30-40查詢工作,然後扔我「數據庫被鎖定」的錯誤。
我測試它錯了嗎?也許我不應該這麼努力地完成這項工作,但我仍然不相信SQLite不是我想要做的很好的選擇,因爲併發將會非常小。
爲什麼你不能使用數據庫服務器? – Maarten 2014-10-28 09:55:38
從你的問題來看,似乎你想對原始XML文件有類似數據庫的數據訪問。你能解釋爲什麼一個數據庫是不可能的嗎?我只能猜測,但你知道你可以將XML文件存儲在數據庫中嗎? – DMAN 2014-10-28 09:55:40
我們針對的是非常小的客戶(大部分時間沒有服務器,只有外部硬盤或Nas),我們希望能夠在一臺PC上使用該應用程序或在多臺PC上共享數據,但項目不包括開發服務器版本。我們也想提出一個完整的試用版本,這並不適合客戶/服務器解決方案。最後一件事:我們與客戶端/服務器應用程序建立了合作伙伴關係,我們每天都會在這些架構中看到許多問題(訪問權限,防火牆等)。我們不希望這樣。 – 2014-10-28 10:07:52