如果我有一個CSV文件,將文件保存爲放置文本還是將其轉換爲其他格式會更快? (用於搜索)CSV文件,二進制格式更快?最快的搜索?
在搜索CSV文件方面,檢索特定行(按鍵)的最快方法是什麼?不提到排序文件抱歉,我的意思是查找文件中的任意鍵。
有些更新:
- 文件將被只讀
- 文件可以被讀取並保存在內存中
如果我有一個CSV文件,將文件保存爲放置文本還是將其轉換爲其他格式會更快? (用於搜索)CSV文件,二進制格式更快?最快的搜索?
在搜索CSV文件方面,檢索特定行(按鍵)的最快方法是什麼?不提到排序文件抱歉,我的意思是查找文件中的任意鍵。
有些更新:
如果你有太多的數據,是非常的生產水平,然後使用Apache Lucene
如果它的小數據集或其關於學習,然後通過Suffix tree和Tries
有幾件事情要考慮這一點:
你存儲什麼樣的數據?它是否有意義,將其轉換爲二進制格式?二進制格式會佔用較少的空間(讀取文件所花費的時間取決於大小)?
在系統運行時,您是否對同一文件有多個查詢?或者每次有人執行查詢時您是否必須加載文件?
您是否需要在不同系統之間高效地傳輸文件?
所有這些因素對決策都非常重要。常見的情況是您只需要加載一次文件,然後執行很多查詢。在這種情況下,數據存儲的格式並不重要,因爲無論如何它都會存儲在內存中。花更多時間思考良好的數據結構來處理查詢。
另一種常見情況是,您無法保持主應用程序正在運行,因此無法將該文件保留在內存中。在這種情況下,擺脫文件並使用數據庫。您可以使用的任何數據庫將比您能想到的任何數據都快。但是,在系統之間傳輸數據庫並不容易。
儘管很可能,文件格式並不是真正需要考慮的問題。我已經閱讀了很多非常長的CSV文件,與之後我需要處理的數據相比,讀取文件所花的時間通常可以忽略不計。
如果文件太大而不能保存在內存中,那麼只需將這些鍵保存在內存中。一些行數也可以保存在內存中,最近訪問的行被分頁出去,因爲需要額外的行。使用fseeks(通過鍵指示)和文件來查找文件本身中的行。然後將該行加載到內存中,以防需要該行上的其他條目。
您的CSV文件有多大? –
@HunterMcMillen說100萬行,我編輯了這個問題,尋找沒有排序的查找算法。 – loyalflow