2011-09-22 50 views
0

在VoltDB注意事項數據庫存儲過程在返回大量數據時性能不佳嗎?

http://community.voltdb.com/DosAndDonts

他們指出

不要創建恢復大量數據(如SELECT * FROM FOO沒有約束),特別適合多查詢分區 交易。保存 程序返回的數據要保守。

這是我的使用案例之一。存儲過程的某些方面是否使得它們不適合這種類型的查詢,或者它是否特定於VoltDB?在這種情況下,性能是否會降低到比傳統RDBMS(如Postgres)更差的水平?

編輯:我的查詢是不是從FOO相當SELECT *,但我需要選擇特定的日期範圍之間的所有金融交易,這可能超過百米行

回答

3

所有數據庫都需要支付實現成本和I/O成本以將大型結果集傳輸回用戶。

但是,我可以專門針對VoltDB。

在VoltDB中,存儲過程都是事務。即使選擇大部分數據庫的結果集與其他併發程序完全隔離。該結果集中的元組需要在內部暫時緩衝(例如,用於跨分區排序或限制),然後返回給用戶。

需要在可能需要幾毫秒(或幾秒)的I/O返回給用戶的結果上維護完全隔離以及在多分區過程的協調節點上發生的聚合的組合限制了最大結果集大小。

我懷疑未來的版本將解決這個限制 - 許多人的數據訪問要求與您所描述的類似。

1

的性能問題是,大數據量傳輸。這通常對於所有數據庫都是正確的。

當數據庫需要返回大量數據時,需要使用大量資源(例如內存,CPU,網絡IO),從而降低性能。

單獨的網絡IO可能是一個問題,就好像它是大量數據一樣,在數據傳輸完成之前,沒有其他任何東西可以通過網絡。

+1

我對VoltDB一無所知,但我傾向於同意。'SELECT * FROM FOO'通常是一個糟糕的主意,傳統的數據庫或內存 –

+0

永遠不會返回比您需要的數據更多的數據,這包括在生產代碼中不使用select *特別是如果連接作爲連接列重複,因此您不需要的數據。另外,是否有人真的要閱讀您返回的所有300萬條記錄,或者您是否可以進行分頁,並且只返回所需頁面所需的內容? – HLGEM

0

如果您正在查詢SELECT * FROM FOO以將結果顯示給用戶界面或類似的用例,那麼分頁是一種很好的方法來限制返回數據的大小和事務的執行時間。 a中有一個分頁示例。

如果您嘗試從VoltDB提取數據以導出到另一個數據庫或系統,則更好的方法是使用VoltDB的Export

相關問題