2015-01-08 29 views
0

我想製作一個程序來保存大學學生的記錄並提供搜索方法。 以下哪種方法會更快?使用單個大型數據文件還是使用大量小型數據文件會更好?

  1. 製作一個文件爲每位學生

  2. 使單個數據文件和搜索?

不同學生的學生數據大小會有所不同。

+2

打開文件是一個相對緩慢的過程。擁有大量文件而不是單個文件可能會比較慢,除非您能夠根據您的查詢按名稱訪問正確的文件。對於搜索代碼,您可能會發現多個文件運行良好。但是,在列出大學所有學生時,多個文件會變成一場災難(特別是如果名稱是散列且您需要按名稱排序順序顯示數據)。這是一個權衡的遊戲。真正的數據庫管理系統和數據管理軟件包相當不錯 - 但有很多代碼可以實現這一目標。 –

+0

如果是作業,你應該告訴你,你應該解釋哪些操作系統,使用哪種語言,你可以使用額外的庫。在所有情況下編輯你的問題來改善它。 –

+1

回答「哪個更快」的問題的正常方法是實現並測試兩者並進行比較。 –

回答

3

它是operating systemfile system具體。一些一般提示(暗含Linux系統的重點,具有足夠好的文件系統,如Ext4,BTRFS等)。

  • 考慮使用database,或許只是Sqlite或DBMS像PostGreSQLMongoDBindexing是性能的關鍵)

  • 你的問題取決於數據的大小。如果您確定它足夠小,可以輕鬆裝入內存(例如,最近的筆記本電腦或臺式機上不到一百兆字節),那麼您可以使用並使用一些文本格式(如JSON)對所有數據進行反序列化。相反,如果您確定您擁有數據中心大小的數據(幾個PB),則不同。

  • 一般來說,避免有許多微小的文件,例如,十萬千字節大小的文件。希望擁有更少但更大的文件(但如果可能,請儘量避免使用巨大的文件大小,例如太字節或大於最大磁盤或分區的一半;請參閱LVM)。

  • 也許像GDBM這樣的索引文件庫是值得的。

  • 如果你需要有很多文件,把它們放在子目錄中:所以dir01/subdir02/file0345.txtfile01020345.txt更好;避免使用例如大的目錄超過一千個文件。 (有關Ext2的信息,請參閱wikipage的圖表,瞭解原因)。

  • 您可能有一種混合的方法:某些數據庫中的小內容(例如小於兆字節),文件中的大內容(在數據庫中具有一些元數據)。另請閱讀關於binary large objects(BLOB)。

  • 閱讀也即將application checkpointingpersistence

  • 定義,實現和測試一些backup恢復一些(人)的程序。對於(不是很大)的數據庫,請以文本格式(例如SQL)轉儲它。

所以你的工作應該與數據的規模的估計,以及如何(和頻率)是訪問了(而改變)開始。

如果是家庭作業,你是不是允許使用外部庫,你應該組織(與fseek(3)lseek(2)隨機訪問,如文件)的文件到固定大小記錄 - 可能編碼爲一些tagged union和關心索引(使用例如hash-tablesB-tree技術)。您可能需要管理若干低級別記錄中的linked lists以處理大量數據。

學習的sqlite的GDBM(都是free software,你應該下載並研究它們的源代碼)的實施將是鼓舞人心的。

請注意,大多數大學只有幾十個學生,我想每個學生都需要幾個(或幾十個)千字節(除非您想存儲每個學生的照片或視頻!)身份,分數和課程信息。所以在實踐中,你可能只需要幾十兆字節(也許是2千兆字節),這在今天適用於RAM。

相關問題