我正在寫一個服務,需要一個嵌入式數據庫來存儲基本信息(id,插入日期,上次更新以及我將返回的大量實際數據)。我將有多個線程同時讀取不同的行,並且至少有一個線程同時更新行。我寧願選擇多個線程進行更新,但我可以只用一個線程進行更新。基本上這是一個緩存服務,但通常我的數據的99%將在緩存中,並且我可以讓單個線程填充缺少的內容,因爲它是緩存每分鐘限制請求數的服務的緩存,因此緩存所有數據。C#嵌入式並行和單聲道支持Db
我希望能夠在windows或linux上運行,所以dotnet和mono支持是必須的,但幾乎所有我看過的嵌入式數據庫都不支持併發性,這對我來說是必須的。對象數據庫或sql數據庫只要與dotnet集成良好,就不會同時存在。
我希望有人有類似的情況需要一個嵌入式數據庫併發支持的經驗。此外,如果可能的話,我更希望有一個免費的(成本明智的)數據庫,因爲這只是在這個階段的家庭個人項目。我已經看過一些數據庫(STSdb,SQL CE,Firebird,在codeplex上的一堆開源代碼),但它們要麼在mono/linux上不工作,要麼似乎沒有併發支持。
我目前正在看SQLite。只有我會指出它的併發性是這樣的。現在在doco裏找不到它,但是我正在閱讀的其中一個頁面說,線程是壞的,雖然它確實支持併發,但它似乎是通過將實例限制在內部的一個線程來實現的。 – Seer 2012-07-23 00:12:54
這就是說,將它內部限制在數據庫中的一個線程中可能不是一個大問題,因爲數據庫應該很快。根據操作系統,你不需要不同的DLL或sqlite的somethign嗎?到目前爲止,這似乎是最好的選擇 – Seer 2012-07-23 00:15:35
是的,你需要不同的二進制文件(* .dll或* .so)來查看單聲道項目SQLite頁面上的先決條件。我不知道這種「單線程」限制(http://www.sqlite.org/cvstrac/wiki?p=MultiThreading,http://sqlite.phxsoftware.com/forums/t/56.aspx) – 2012-07-23 00:27:55