簡體   English   中英

CSV 與 MySQL 性能對比

[英]CSV vs MySQL performance

讓我們假設 PHP5 使用 MySQL5 和 CSV 文件的相同環境。 MySQL 與托管腳本位於同一主機上。

MySQL 是否總是比檢索/搜索/更改/添加/刪除記錄到 CSV 更快?

或者是否有一些數據低於 PHP+CSV 的性能比使用數據庫服務器更好?

CSV不允許您為快速搜索創建索引。

如果您始終需要來自單個表的所有數據(例如application settings ),則CSV更快,否則不會。

我甚至不考慮SQL queriestransactionsdata manipulationconcurrent access ,因為CSV當然不適用於這些事情。

不,MySQL可能會更慢地插入(附加到CSV非常快)和表掃描(非基於索引)搜索。

更新或刪除CSV是非常重要的 - 我將其作為練習留給讀者。

如果您使用CSV,則需要非常小心地正確處理多個線程/進程,否則您將獲得錯誤的數據或損壞您的文件。

但是,還有其他優點。 要弄清楚如何在CSV上進行ALTER TABLE?

如果您需要UPDATE,DELETE,ALTER TABLE或一次從多個進程訪問該文件,則使用CSV是一個非常糟糕的主意。

作為一個來自數據行業的人,我已經處理過這種情況。

一般來說,MySQL會更快。

但是,您沒有說明您正在開發的應用程序類型。 您是否正在開發主要用於搜索和檢索記錄的數據倉庫應用程序? 您的記錄中通常包含多少個字段? 您的數據文件中通常存在多少條記錄? 這些文件是否具有彼此的任何關系屬性,即您是否擁有客戶文件和客戶訂單文件? 你需要多長時間來開發一個系統?

答案取決於前面列出的問題的答案。 但是,您通常可以使用以下指南:

如果要構建一個記錄超過一百萬的數據倉庫應用程序,您可能需要考慮放棄這兩個應用程序並轉移到面向列的數據庫

對於較小的數據集,CSV可能會更快。 但是,在CSV中滾動自己的插入例程可能會很痛苦,並且您將失去數據庫索引的優勢。

我的一般建議就是使用MySql,正如我之前所說,在大多數情況下它會更快。

從純粹的性能角度來看,它完全取決於您正在進行的操作,正如@MarkR所說。 附加到平面文件非常快。 正如在整個文件中讀取(用於非索引搜索或其他目的)。

確保在您的平台上更好地適用於您的用例的唯一方法是進行實際的分析。 我可以向您保證,對百萬行數據庫進行全表掃描將比百萬行CSV文件上的grep慢。 但這可能不是您使用的現實例子。 “斷點”將根據您檢索,索引搜索,非索引搜索,更新,追加的特定組合而有很大差異。

對我而言,這不是性能問題。 您的數據聽起來以記錄為導向,並且MySQL在處理這類數據時非常優越(一般而言)。 如果你的用例在數據變大的時候甚至有點復雜,那么與100k記錄數據庫表相比,處理100k行CSV文件將會非常可怕,即使性能稍微好一點(這是沒有的)意味着保證)。

取決於使用。 例如,對於配置或語言文件,CSV可能會做得更好。 無論如何,如果你使用PHP5,你有第三個選項 - SQLite,它嵌入在PHP中。 它使您易於使用,如常規文件,但RDBMS的穩健性。

數據庫用於存儲和檢索數據。 如果您需要的不僅僅是普通行/條目添加或批量列表,為什么不選擇數據庫方式呢? 否則你基本上必須自己編寫功能(包括刪除,排序等)。

CSV是一種令人難以置信的脆弱格式,需要您的應用程序進行所有格式化和計算。 如果您需要更新csv中的特定記錄,則必須先讀取整個csv文件,找到內存中需要更改的條目,然后再將整個文件寫出來。 這很快變得很慢。 CSV僅適用於一次寫入,讀取一次類型的應用程序。

如果您想在夜間像小偷一樣快速導入,請使用 SQL 格式。

如果您在生產服務器中工作,CSV 速度較慢,但它是最安全的。

只需確保 CSV 文件沒有會覆蓋現有數據的主鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM