2015-10-13 31 views
6

我很好奇。我有這樣的流量:我們有大量的數據收集/表格。並且有一些面向查詢的select,它很長,需要3秒。長數據庫查詢結果同時寫入

但是,我們期待高度併發的環境,每秒鐘我們會在數據庫中獲得100條新記錄。

假設我們有一個查詢,在查詢開始之前,我們有1000個滿足這些查詢的條目。查詢需要3秒,每秒有50個新項目匹配添加到數據庫的查詢。我的問題是 - 這是什麼結果這個查詢返回給我(它仍然是1000或1150之間或之間),以及這是如何依賴於不同的數據庫引擎(SQL,NoSQL)。 O

這不是一個關於確切數字的問題,而是更多 - 爲什麼它會是這些數字。


看起來問題有點寬。讓我們用MySQL,Postgres,MongoDB和Cassandra限制DB。

回答

1

一般來說(主要是因爲您沒有命名特定的數據庫),數據庫的併發級別是可配置的,屬於性能調優類別。

一些常見的鎖粒度是:

  • ROW - 僅數據的單一行被鎖定在一個時間
  • PAGE - 一些組行中的在一個時間被鎖定
  • TABLE - 整個表被鎖定

因此,如果您使用ROW級鎖定,您可能會獲得全部1150個結果,代價是鎖定開銷較高。或者,如果您使用TABLE級別鎖定,則會非常快速地獲得1000個結果,但是會以數據流被阻止寫入數據庫3秒鐘爲代價。

+0

謝謝。所以如果它是表鎖,而不是在查詢期間所做的所有寫請求都會失敗? – Ph0en1x

+0

@ ph0en1x不完全。寫入請求將被阻塞(因爲他們正在等待獲取鎖定),並且如果他們花費太多時間等待獲取鎖定,則它們可能會因超時而失敗。但超時值通常也是可配置的。 –

+0

是的,我明白這一點。但問題有點泛泛。 – Ph0en1x