我環顧了谷歌,但沒有找到任何好的答案。它是否將數據存儲在一個大文件中?它使用什麼方法使數據訪問更快地讓他們讀取和寫入常規文件?MySQL如何存儲數據
回答
它是否將數據存儲在一個大文件中?
一些的DBMS整個數據庫存儲在一個文件中,一些分解表,索引和其他對象種到單獨的文件,一些拆分的對象文件不厚道,而是由一些存儲/尺寸標準,甚至,有的就entirely bypass the file system,等等......
我不知道MySQL使用的這些策略中的哪一個(它可能取決於您使用MyISAM還是InnoDB等),但幸運的是,這並不重要:從客戶端角度來看,這是客戶應該很少擔心的DBMS實現細節。
它使用什麼方法,使數據存取更快他們只是讀取和寫入一個普通文件?
首先的DBMS不只是性能:
- 他們更數據的約安全 - 他們必須確保沒有數據損壞甚至在一個臉停電或網絡故障。
- DBMS也是約併發 - 他們必須在多個客戶端之間進行仲裁併可能修改相同的數據。
至於你的業績的具體問題,關係數據是非常「敏感」到索引和聚類,這是得天獨厚的的DBMS利用來實現性能。最重要的是,SQL的基於集合的性質讓DBMS選擇檢索數據的最佳方式(至少在理論上,有些是的DBMS在那個比別人更好)。欲瞭解更多有關DBMS的表現,我熱烈推薦:Use The Index, Luke!
此外,您可能會注意到,大多數的DBMS是相當老產品。像十年舊的,這對我們行業來說確實是一個永恆的話題。其中一個結果就是人們有足夠的時間來優化DBMS代碼庫。在理論上,你可以通過文件實現所有這些事情,但是我懷疑你最終會看到與DBMS非常接近的東西(即使你有足夠的時間和資源來實現它)。那麼,爲什麼要重新發明輪子(除非你不想要輪子?))?
通常儘管某種 「日誌」 或 「事務日誌」 機制。此外,爲了最小化「邏輯」損壞(由於應用程序錯誤)並促進代碼重用的可能性,大多數DBMS支持聲明性約束(域,鍵和引用),觸發器和存儲過程。
通過isolating transactions甚至通過允許客戶端明確地鎖定數據庫的特定部分。
從技術上講,一切都是一個「文件」,包括文件夾..你的整個硬盤是巨大的文件。話雖如此,是關係型數據庫,MySQL將存儲數據包含在硬盤上的數據文件中。數據庫和寫入/讀取文件之間的區別是蘋果和橘子。數據庫提供了一種結構化的方式來存儲和搜索/檢索數據的方式,你永遠不會通過只讀和寫入文件複製..除非你寫你自己的db當然..
希望有所幫助。
當您將數據存儲在平面文件中時,它是緊湊有效的,可以按順序讀取,但沒有快速的方式隨機訪問它。對於諸如文檔,名稱或字符串的可變長度數據尤其如此。爲了實現快速隨機訪問,大多數數據庫使用稱爲B-Tree的數據結構將信息存儲在單個文件中。這種結構允許插入,刪除和搜索速度很快,但它可以比原始文件多佔用多達50%的空間。然而,通常這不是問題,因爲磁盤空間便宜且更大,而主要任務通常需要快速訪問。 欲瞭解更多信息: http://en.wikipedia.org/wiki/B-tree
仔細觀看了MySQL的文檔,我們發現指數也可以任意設定爲「BTREE」或「HASH」型。在單個MySQL文件中,存儲了可以使用任何數據結構的多個索引。
雖然安全性和併發性很重要,但這些不是爲什麼數據庫存在,而是增加了功能。第一個數據庫存在,因爲不可能隨機訪問包含可變長度數據的順序文件。
這個問題有點老,但我決定回答它,因爲我一直在做一些相同的挖掘。我的答案是基於Linux文件系統。基本上,mySQL將數據存儲在硬盤中的文件中。它將文件存儲在具有系統變量「datadir」的特定目錄中。打開一個mysql控制檯並運行以下命令將會告訴你該文件夾的確切位置。
mysql> SHOW VARIABLES LIKE 'datadir'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.01 sec)
,你可以從上面的命令看,我的 「DATADIR」 定位於/var/lib/mysql/
。 「datadir」的位置在不同的系統中可能會有所不同。該目錄包含文件夾和一些配置文件。每個文件夾代表一個mysql數據庫,幷包含具有該特定數據庫數據的文件。以下是我的系統中「datadir」目錄的屏幕截圖。
目錄中的每個文件夾代表一個MySQL數據庫。每個數據庫文件夾都包含表示該數據庫中的表的文件。每個表格有兩個文件,一個文件的擴展名爲.frm
,另一個文件的擴展名爲.idb
。見下面的截圖。
的.frm
表文件存儲表的格式。請點擊此處查看詳細信息MySQL .frm File Format
.ibd
文件存儲表的數據。點擊這裏查看詳細信息InnoDB File-Per-Table Tablespaces
多數民衆贊成!我希望我能幫助別人。
- 1. 如何安全地存儲MySQL數據?
- 2. 從本地存儲mysql存儲數據
- 3. 存儲在MySQL數據庫
- 4. MySQL幫助存儲數據
- 5. 在MySQL中存儲數據
- 6. 將數據存儲到mysql
- 7. MySQL數據存儲問題
- 8. 如何將php數組數據存儲到mysql數據庫中
- 9. 如何使用javascript將數據存儲到mysql數據庫中?
- 10. 如何將數據存儲到MySQL數據庫?
- 11. 如何將html數據存儲在mysql數據庫中?
- 12. 如何存儲JSON數據在mysql數據庫
- 13. SCRAPY:如何將數據存儲到Mysql數據庫
- 14. 如何在MySQL數據庫中存儲特定(polls eg。)數據?
- 15. 如何緩存mysql存儲的函數
- 16. 如何使用PHP和MySQL在MySQL數據庫中存儲數組數據?
- 17. 如何存儲MongoDB數據
- 18. Bukkit如何存儲數據
- 19. redis如何存儲數據
- 20. 如何存儲Json數據
- 21. HDR數據如何存儲?
- 22. 如何將數據存儲到數據存儲 - AppEngine
- 23. 將mysql數據存儲在數組中
- 24. Mysql的存儲數據作爲數組
- 25. 將mysql數據存儲在數組中
- 26. 如何在mysql數據庫中存儲多維javascript數組
- 27. 如何將localstorage數組存儲到MySQL數據庫?
- 28. 如何將窗口參數存儲到MySQL數據庫?
- 29. 如何將數組值存儲在MySQL數據庫中
- 30. 如何將圖像存儲在數據庫中,如mysql或oracle?
你可能想看看它使用的不同數據庫引擎。有些會將數據存儲在「大文件」中,而其他數據則存儲在內存中。對於訪問速度,它使用固定大小的列和行,因此獲取特定記錄比掃描所有文本更容易。它還可以保持數據索引,使檢索速度更快。默認和最常用的引擎是我的isam。其他包括inno-db和MEMORY。 – gcochard
@Greg,但即使是內存表也存儲在某處以確保持久性。底線是它存儲在磁盤的某個地方。 – Namphibian
@Namphibian內存表中的數據是不是持久化的,只有結構是 – Cez