2010-04-19 30 views
7

一位朋友和我在辯論他是否應該爲他的網站的後端使用MySQL或平面文件數據庫。我告訴他要用MySQL,因爲它結構合理,記錄良好,並且一致。另一方面,他說他寧願加快速度。讀取文件比連接MySQL快得多,這讓我懷疑他是否正確。例如,爲什麼不創建一個文件夾中的每個表,就像這樣:users/groups/posts/,內夾有通過ID命名(123)的文件,然後對數據使用像這樣的格式:username: John\npassword: e2fc714c4727ee9395f324cd2e7f331f\nemail: [email protected]爲什麼在平面文件中使用MySQL?

換句話說,MySQL比平面文件有什麼優勢?

+2

Dupe http: //sackoverflow.com/.com/destions/2356851/database-vs-flat-files – 2010-04-19 13:49:15

+0

對不起,我在做主題時找不到它。 – 2010-04-19 14:04:56

+0

如果您因爲連接速度而發現不同,您的連接出現問題。 – 2013-09-25 17:40:36

回答

11

換句話說,MySQL比平面文件有什麼優勢?

MySQL提供索引和連接(用於執行性能),交易(數據完整性)和SQL(發展性能)。

你的項目只涉及一個3 -line自給自足的文本文件,你不需要MySQL

2

請問什麼是「flatfile數據庫」?平面文件是一個平面文件 - 它是這樣的。說它是一個平面文件數據庫讓你覺得它神奇地具有數據庫的一些功能 - 每個定義的平面文件都沒有。

MySQL比 flatfiles有什麼優勢?

跳過MySQL這裏 - 你問的主要問題是「爲什麼要使用數據庫」。

我建議你看看性能比較(sewarch操作 - 指數是有原因的),並查找術語「酸性條件」,以得到一個模糊的,甚至知道什麼數據庫實際上做。

平面文件不給你任何保證,數十年的開發人員已經提出了他們一遍又一遍的所有問題。

9

讀取文件比連接到MySQL快很多,這讓我想知道他是否正確。

Hobcobbles。像MySQL數據庫存儲它在文件中的數據爲好,但擁有萬噸優化,最明顯的是它的索引功能,允許巨大性能提升相比,讀取(或寫入)一個大平面文件。

平面文件可能在某些非常有限的情況下快,但數據庫引擎使用的製作數據訪問速度較快的開發商幾代人的經驗,更可靠。例如,當您的腳本的兩個實例嘗試將數據寫入數據庫時​​,請考慮競爭條件和鎖定。

如果在CSV文件中使用的數據量超過了幾行,或者在文件(例如Wiki的頁面)中很難輕鬆管理,那麼請使用數據庫。它增加了一層複雜性,但爲您節省了很多頭痛。

只要考慮在一個平面文件快速做一個SELECT * FROM posts WHERE MONTH(post_date) = "2010-03-10"和什麼是必要的,從頭開始寫實現。

1

還有安全問題。如果你沒有妥善保護平面文件,他們可以更容易地暴露。特別是如果您要存儲用戶信息,則無法在平面文件中輸入。

假設您的網站或應用程序垂直增長,平面文件也不會縮放,因爲平面文件越長,讀取的時間越長。

最後,在已經很容易使用數據庫的情況下使用平面文件很簡單。它並不是在所有人都使用數據庫的方式上做「正確的方式」,所以我會反駁:爲什麼要在MySQL上使用平面文件?是否有人在事實理解或同意您使用平面文件的決定後進入維護您的應用程序?

+0

只因爲每個人都做了一件事情並不能使它成爲正確的事情。速度平面文件提供可能相當大。此外,平面文件本身不會變大,因爲您爲MySQL數據庫的每個「行」都有單獨的文件。至於安全性,這也是MySQL的一個問題,你只需要學習如何防止利用。 – 2010-04-19 14:03:50

+1

這可能是真的,當涉及到你的朋友離開最近的橋時,但在計算機世界,我認爲這個論證不佔重要地位。計算是一個科學世界,通過做大體上相同的方式(即使有所變化),其他人一直在做的事情已經成熟了。範例在一夜之間不會成爲範例。 – jathanism 2010-04-19 14:16:18

1

我們需要更多的上下文。

如果您的朋友正在閱讀完整頁面(存儲在數據庫中的廣告「斑點」),那麼是的,使用MySql沒有太大的幫助。如果他有詳細的數據(包括我不知道的博客文章,newsitems,帶有元數據的圖片,訂單詳細信息),那麼除非該網站非常簡潔且非常靜態,否則基於文件的方法將很快變得非常有限。

你提出的解決方案有兩大缺點:

使用文件夾/文件名相同爲對每個表只是一個索引(在這種情況下,文件名),因此搜索任何其他標準將採取年齡。更別說在單個目錄中擁有大量文件的事實將開始徵稅操作系統。

最重要的是,即使您使用散列密碼作爲URL的一部分,security-by-filename也存在一定的安全風險。

過去我做過一些基於文件系統的中型應用程序(由於管理不善,我們無法使用數據庫),這很有趣,但是隻要您閱讀幾百個文件,就會非常有限。即使數量不多,你也必須從一開始就拉動技巧,希望能夠繼續保持運轉。

+0

你總是可以將文件稱爲'id = 1',然後將'username = John'的內容鏈接到id = 1,並將鏈接解釋爲讀取其他文件。 – 2010-04-19 14:06:27

+0

是的,如果你不喜歡它的工作原理,你也可以重寫文件系統。 DBMS提供久經考驗的功能。如果你不需要它們,你可以使用文件系統。但是如果你每次都被迫重新發明大量的車輪,那麼soimeone指出你的設計有問題,或許你最好接受這個事實,即你真的需要一個數據庫? – 2010-04-19 14:39:10

0

另外,如果沒有在Posts/文件夾中存儲所有用戶信息,您將如何獲取John Doe編寫的所有帖子(例如)?在SQL中,它只是一個聯合選擇語句。使用平面文件時,您必須將信息存儲在實際的帖子文件中,或編寫代碼以自行執行加入搜索操作。

0

只是一個例子:考慮到您擁有1,000,000位客戶,並帶有地址信息,並且您需要搜索紐約的客戶並設置他們。如果您將每個客戶存儲在單獨的文件中,則需要讀取所有1,000,000個文件並查看客戶是否屬於該州。如果您將所有記錄存儲在一個大文件中 - 您需要讀取整個文件並重複查找紐約所有客戶。

在這兩種情況下你都會鬆動。

對於像MySql這樣的RDBMS--您可以使用所謂的「set」操作或SELECT語句,並添加索引,引擎可能只會讀取比查找紐約所有客戶所需數據量多10/20的數據。

希望這有助於

0

數據冗餘和缺乏原子都在其中體現成倍它持有在查詢和其它問題,如引入延遲需要更多的數據平面文件數據庫中的大問題更新/刪除/插入異常。

帶規範化的關係數據模型有助於通過確保原子性和每個記錄是唯一可識別的(第一範式)來消除這些問題,即表中的每個字段在功能上都依賴於主鍵(第二範式)並且非關鍵字段不共享表中其他字段的傳遞依賴關係(第三範式)。

關係數據模型決不是唯一的方法,可能不是最好的,但它肯定會嘗試解決平面文件中固有的查詢延遲和異常問題。

0

Mysql已經與平面文件一定的優勢比較, 文件結構較差的查詢,但CRUD的文件比MySQL的快速,你可以不使用SQL數據庫,如蒙戈DB有更好的結構和更快的速度, 有是sql和no-sql數據庫之間的一些區別,但我認爲它更好地使用no-sql db而不是flatfile,也請注意,如果你在bigdata上工作,no-sql db肯定比sql更好..

相關問題