2012-09-14 23 views
0

這可能是常識,但只是想確定。隨機讀取重複的SQLite文件會提高讀取性能嗎?

正如manual所說,SQLite理論上可以滿足每天點擊1,000,000次。現在,如果我僅使用SQLite讀取數據,並且如果我製作了3個數據庫文件副本(例如),然後隨機讀取這些數據,理論上可以將性能提高多達3,000,000次,或者它將不會獲得任何效果,因爲它使用相同的庫/代碼?

例子:

$choices[1] = 'db1.db'; 
$choices[2] = 'db2.db'; 
$choices[3] = 'db3.db'; 

$random = rand(1, 3); 
$db_file = $choices[$random]; 

$db->read($db_file); 
+0

手冊中提到了每天10萬次點擊,而不是1個月。這是一個粗略的估計,因爲它很大程度上取決於每次擊中你執行多少和多少SQLite操作。這也是一個非常保守的估計,因爲每天10萬次的平均訪問速度爲每秒1.15次,這在任何標準上都不算太高,但他們可能會考慮到使用高峯。我懷疑你會通過在三個本地文件之間分配負載來獲得很多性能,因爲讀線程不應該相互阻塞對方。 – lanzz

+0

@lanzz手冊說SQLite已經被證明可以使用10倍的流量。所以它是100k x 10 = 1M – IMB

+0

這並不意味着它在這一點上達到了任何限制,它可能只是峯值使用與容量備用。你是否遇到任何性能問題,或者這是一個理論問題?每天1百萬次點擊已經是很多流量。 – lanzz

回答

1

我希望它讓你的表現更糟,而不是更好,因爲你會投入更多的壓力,文件系統緩存。

事實上,它可能比只有三分之一的速度差得多。考慮一下數據庫的大小與可用RAM大小相同的情況,並且每個查詢都需要掃描整個數據庫。如果您只有一個副本,查詢的成本就是掃描所有內存的時間。如果您有三個副本並隨機選擇使用哪一個副本,那麼查詢的平均成本可高達從磁盤讀取整個數據庫的時間的三分之二(取決於訪問模式和緩存的驅逐策略)。而磁盤比內存慢許多個數量級。請參閱thrashing