2009-09-05 79 views
0

我在Visual Studio 2005,.NET 2.0中工作。我應該使用哪個數據庫以獲得最佳性能

我需要編寫一個應用程序,它監聽COM端口並將傳入數據保存到數據庫。主要功能:保存傳入數據(一系列13位數字),如果此編號已存在,則將其標記爲雙。例如,可以在數據庫中的這些記錄:

0000000000001 OK
0000000000002 OK
0000000000002雙
0000000000003 OK
0000000000004 OK

我可以使用SQL數據庫,但我不知道如果速度足夠快......數據庫應該能夠存儲多達10.000.000條記錄,並且每分鐘記錄多達100條記錄(因此,如果此記錄已存在,則需要每分鐘檢查100次)。

我應該使用哪個數據庫?也許整個數據庫將需要在RAM中。我在哪裏可以瞭解更多關於這方面的信

感謝

回答

3

您所瞄準的性能水平不會嚴重影響任何數據庫系統。 Microsoft SQL Server,Oracle,Informix,MySQL,Postgres,Sybase都將輕鬆應對這種情況。

關鍵是要很好地設計你的數據庫和內存結構。

一種耐人尋味的方法將會很快失敗 - 但一些聰明的設計(使用正確的表結構,索引和查詢)將會很好地工作。

現在,如果您想要每提交100條記錄,那麼您將會面臨挑戰。

+0

OK ......現在,當我想想,100每分鐘讀取真的不是什麼大不了的事...... – sventevit 2009-09-05 10:47:20

0

像你需要保持你的數據在內存中表示(即,編寫包含它的類)和更新/對,在內存中的表示,而不是針對檢查這聽起來我「真實」的數據庫。

如果您需要長期存儲數據,您可以定期進行批量保存,最好是在COM端口新數據流入中斷期間進行保存,但如果這種情況不會發生,可能只是單獨使用當你的原始線程不斷收集新的數據時,將線程保存到數據庫。

1

我認爲在體面硬件上,任何數據庫服務器都能夠每分鐘處理100次更新(每秒更新少於2次更新)。

我建議你使用MySQL,因爲它支持排除要求使用事務,爲「檢查是否存在,那麼更新」你需要原子更新。例如:

INSERT INTO data (number, status) VALUES ('00000001', 'OK') ON DUPLICATE KEY UPDATE status = 'DOUBLE'; 

有支持此功能的其他SQL服務器,所以最好的建議是你所知道的(不要忘了把唯一索引的數量列)去。

3

你不需要數據庫,你需要一個哈希表。 你也可以使用排序樹,它會更節省空間。 關於SQL服務器,你並不害怕沒有100分鐘的SQL一分鐘...

0

如果你只需要一個關鍵值對,那麼爲什麼不看一個分佈式緩存呢?

Velocity或其中一個.net memcache端口應該可以正常工作。這種方法的優點在於,如果您的需求擴展,它可以擴展,並且不需要數據庫服務器設置/維護或許可成本。

0

我同意貝文。

對於進一步的考慮:

  • 使用存儲過程所以SQL是優化。
  • 使用預準備語句。
  • 你什麼時候從數據庫讀取數據?您可以先插入,然後添加功能(報告?等)以供閱讀,並且您將開始處理鎖定,如果您不打算這樣做,可能會導致性能下降。
+0

使用存儲過程並不nessecarily使其優化。 SQL Server 2005和更好(甚至可能是2000),重用SQL語句的執行計劃。 – JoshBerke 2009-09-05 11:03:12

相關問題