2008-12-10 32 views
7

我一直在閱讀一些關於如何開始使用Rails 2.0的教程。Rails 2.0:爲什麼不使用sqlite3?

(超時:天才網站名稱創意來自我只是做了一個錯字設想:「tutoRAILS」對不起,回到我的問題)

在大多數我一直在閱讀教程,它似乎鼓勵使用MySQL而不是sqlite3。是否有這樣的原因,比如性能方面或其他?我只是在我的個人電腦上使用InstantRails測試Rails,並且他們非常好,可以在他們的設置中包含MySQL,但我一直在使用sqlite3製作我的實驗性應用程序。我是否遺漏了sqlite3的一些重要警告,或者這只是其他人對MySQL的一般偏好?

回答

11

SQLite是一個很好的引擎,但它仍然是一個正在處理(或桌面)風格的引擎。流程引擎在併發性方面具有固有的弱點,這使得它們在基於服務器的引擎(如用於網站的MySQL)或其他具有潛在的大量同時寫入訪問的場景的基礎上選擇性較差。

參見SQLite的網站此頁:
http://www.sqlite.org/whentouse.html

SQLite的通常會低到中等流量的網站

工作的偉大的數據庫引擎如果......你正在考慮將數據庫組件拆分到另一臺機器上,那麼你應該肯定考慮使用企業級客戶端/服務器數據庫引擎而不是SQLite。

+3

他們還說:'每天點擊次數少於100K的任何站點都應該能夠很好地與SQLite一起工作。 100K點擊/日數是一個保守的估計,而不是一個硬性上限。 SQLite已被證明可以處理10倍的流量。這就是說SQlite對95%的互聯網網站都很好。 – Niteriter 2009-12-23 15:34:50

1

我認爲這主要是在教程中保持低摩擦水平的問題。如果你是一個newby,我只會推薦MySql,因爲它可以更容易地完成本教程。否則,sqlite是一個很好的桌面解決方案。

+0

授予我不使用Rails,但我個人發現SQLite比MySQL更容易使用 – 2008-12-10 18:47:15

4

SQLite非常棒,但它有多個併發讀寫器的性能問題。

像Joel所引用的,如果你的網站流量很低,這很少會成爲一個問題,但在中等活動中,我有時會被鎖定的數據庫(和掛起的查詢)。在這種情況下,更好地支持多個併發用戶的數據庫更好。個人而言,如果我使用DB不可知層來訪問數據庫,那麼它很容易從一個切換到另一個,所以很容易從SQLite開始並在必要時移動到另一個不同的層。

3

我總是從SQLite開始。如果我需要創建一個Rails項目的原型,我可以毫不費力地完成並運行。建立一些腳手架,運行我的遷移,寫一些測試,然後我參加比賽。

但是,如果項目達到您要部署它的程度,我會建議使用MySQL或PostgreSQL以獲得更好的性能。

SQLite對於小型嵌入式應用程序也有其好處,或者如果您沒有爲只有少數人使用的工具運行數據庫的開銷。

0

請注意,Sqlite是Camping框架的默認引擎。有道理,因爲兩者都針對小而快,並不大和企業級

2

由於Rails 2.0,sqlite3 默認數據庫,所以肯定沒有偏見反對它。但是,當默認數據庫是MySQL時,許多Rails教程早於Rails 2.0。

正如其他人所提到的,sqlite3是一個很好的數據庫,可以快速方便地啓動和運行應用程序。對於您的Rails開發環境,它有一些問題 - 即使您的應用程序變得複雜,它也可能正常工作。對於Rails測試環境來說,這也是一個非常好的選擇 - 它非常快速,大多數測試都具有相對簡單的數據庫需求,並且往往不需要併發性,否則會遇到sqlite3的限制。

然而,對於許多人來說,如果不是大多數,生產網站,旨在爲更多的併發一個DB可要求 - MySQL和Postgres的,等等。

2

對於像一個Rails博客引擎SQLite的將工作即使在相當高的數量下也是如此,因爲它的全部讀取和很少的寫入。實際上,大部分命中都是緩存頁 - 取決於您是否允許評論以及您的評論線程是多麼活躍 - 您可能會因單一的rails進程而失去原因,因爲您的web服務器幾乎可以處理所有請求。

對於SQLite數據庫,每個rails進程都必須通過文件上的文件系統鎖進行寫操作,以便在寫入很多進程時最終阻塞很多內存。考慮這一點的一個方法是考慮你將有多少軌道進程......如果它需要超過3-4個,那麼SQLite可能不是一個好的選擇。

相關問題