簡體   English   中英

具有fstream或數據庫的C ++

[英]C++ with fstream or database

我正在嘗試在C ++中實現圖像識別程序。

我已經完成了特征提取,現在嘗試保存大量數字。 我有2種實現方式,一種是將數據保存到二進制文件中,以減少計算的開銷,也可以使用數據庫來保存信息。

二進制文件讀寫速度很快,但是很難訪問,而數據庫似乎是一個更易於使用的界面,但是我不確定性能是否足夠快。

你們對fsream或數據庫作為快速持久存儲的選擇有任何經驗嗎?

您可以使用SQLite 它基本上允許對本地文件進行數據庫式訪問。 您也可以使用它創建內存數據庫,但是我不知道是否可以持久保存這些數據庫。

另外,這里的最佳選擇在很大程度上取決於您的訪問模式。 如果只是順序寫入和順序讀取,那么二進制文件是最佳解決方案。

如果您確實想要速度,請考慮使用C型I / O函數,例如fopen(0,fread()等)。由於多種原因,這些函數通常比iostream更快。

對我來說,使用像SQLite這樣的數據庫的好處是我的數據具有獨立的格式,並且可以使用SQL查詢數據。

事實證明,將數據寫入SQLite數據庫要比將數據寫入簡單的CSV文本文件慢得多。

這取決於您隨后要處理的數據? 如果您只是想再次閱讀它並做一些事情,請使用建議的fstream(或C風格I / O)。 如果要查詢數據並且僅獲取特定數據,請使用SQLite。

您還必須考慮如何將數據存儲在數據庫中。 如果要將數據存儲為BLOB,則可能最終失去SQL的好處和犧牲性能。

我正在用C ++編寫音頻識別程序,並且現在使用PostgreSql進行數據存儲。 所以我也對答案感興趣:)。 我可以提出的是,應該根據識別算法選擇數據存儲。 如果將圖像與保存的圖像進行1比1的比較,則二進制文件似乎更快。 但是,如果在識別期間您一次處理多個圖像,則數據庫可能是更快的解決方案。

暫無
暫無

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

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