我創建一個C#WPF應用程序攝入RS232數據,所有數據存儲到嵌入式數據庫中比較高的速度(每秒數百個)。該應用程序同時兩件事情:嵌入式數據庫與拍攝快速多次寫入
- 採取RS232數據並存儲到數據庫
- 圖中的數據從數據庫中。
我認爲SQLite是因爲我的應用程序需要嵌入式數據庫,它是一個單用戶應用程序。但是存儲和繪製數據(可能存儲當前數據並繪製昨天的數據)需要對數據庫進行併發讀取和寫入。我聽說SQLite鎖定了一個查詢,並且同時處理多個查詢。真的嗎?如果是的話,其他嵌入式數據庫支持多重寫入?
我創建一個C#WPF應用程序攝入RS232數據,所有數據存儲到嵌入式數據庫中比較高的速度(每秒數百個)。該應用程序同時兩件事情:嵌入式數據庫與拍攝快速多次寫入
我認爲SQLite是因爲我的應用程序需要嵌入式數據庫,它是一個單用戶應用程序。但是存儲和繪製數據(可能存儲當前數據並繪製昨天的數據)需要對數據庫進行併發讀取和寫入。我聽說SQLite鎖定了一個查詢,並且同時處理多個查詢。真的嗎?如果是的話,其他嵌入式數據庫支持多重寫入?
好的,有幾件事。
首先,是SQLite是線程安全的,儘管筆者並不熱衷於它。在這裏閱讀:http://www.sqlite.org/faq.html#q6。
其次,你提到的「快」爲每秒數百個刀片。如果您將所有內容都包含在事務中,SQLite可以輕鬆地達到每秒30,000次插入。我說這不是因爲這真的是你的問題,而是因爲知道這可能會幫助你做出決定(因爲它重新定義了被認爲是「快速」的東西)。
檢查出RavenDB。 http://www.ravendb.net/用它運行一些測試會很容易,看看它是否會處理你的需求。
Berkeley DB具有無阻塞寫入並且具有用於被迅速的名聲。
非常有趣的是,it can be used as a drop in replacement for SQLite。寫入的SQLite 第3版API
應用程序可以切換到使用 Oracle Berkeley數據庫沒有代碼 變化,重新聯對 Berkeley DB的SQLite庫。這兩個 產品的應用程序級行爲是相同的,但Berkeley DB的 高級功能提供了SQLite應用程序的性能,併發性,可伸縮性,可用性和可用性。
這聽起來像它會適應該法案相當不錯。
不知道有關插入替換。謝謝! – 2011-04-22 00:36:48
我確信多重寫入在SQLite中是不可能的。但「線程安全」是否意味着它至少可以有一次寫入和多次讀取? – KMC 2011-04-08 02:49:05
@KMC - Sqlite支持事務處理,所以這是您的併發控制手段(我懷疑這是您的意思是線程安全)。只要您不跨線程共享連接,Sqlite就是線程安全的。還要注意的是,Sqlite僅支持數據庫級鎖定,無論連接數是多少,都有效限制您只有一個定時器的寫入器。 – 2011-04-22 00:46:07