簡體   English   中英

使用獨立的C ++應用程序存儲數據

[英]Storing data with a stand-alone C++ application

我使用Apache,PHP和MySQL進行Web開發和本地應用程序。 在過去的幾年里,我慢慢學習C ++,並希望在今年夏天建立一個應用程序。 具體來說,我想創建一個“庫”應用程序,在其中我可以存儲有關我擁有的書籍,CD和記錄的信息。 我知道這種類型的應用程序存在,但我想學習C ++,這似乎是一個很好的方法來實現它。

以下是一些問題:

  1. 是否可以創建一個不需要數據庫來存儲數據的獨立應用程序?

  2. 如果上面#1的答案是“是”,那么對於可能需要管理大量數據的應用程序來說,這樣做是否是個好主意?

  3. 您建議將哪些數據存儲選項用於C ++應用程序?

謝謝!

更新嗯,有很多很好的答案。 這是一個很棒的網站,有這么多的貢獻者。 事實證明,我現在可能不需要去C ++路線。 than I want to pursue C++. 我現在意識到,我最感興趣的是寫作,可以作為一個“圖書館”的組織體系比我想追求C ++函數的應用程序。 感謝大家的回答!

是否可以創建一個不需要數據庫來存儲數據的獨立應用程序?

是的,您可以使用某種自定義文件格式來存儲數據。

如果上面#1的答案是“是”,那么對於可能需要管理大量數據的應用程序來說,這樣做是否是個好主意?

這不是一個好主意,除非你真的想學習在結構化文件中存儲數據。

您建議將哪些數據存儲選項用於C ++應用程序?

我會看看SQLite 它是一個數據庫,但它不需要單獨的引擎。

如果您不想使用數據庫,則可能需要將數據保存到文件(或多個文件)。 如果是這樣,問題可能是:哪種文件格式最好? 答案取決於各種因素:

1)訪問速度快,體積小,易於解析? 答案是“二進制數據”。 只需使用fwrite將數據直接寫入輸出文件即可。 有兩個缺點:文件不是人類可讀的,維護不同版本很麻煩。 如果您閱讀的數據並不完全符合您的預期,那么您很快就會遇到麻煩。

2)人性化,易於維護? 這就是XML的用途。 現在可以使用像tinyXML這樣的解析器,它們是將數據寫入文件的絕佳工具。 缺點是編寫加載/保存例程需要更多時間(很多情況下很多)。

3)為您完成工作的圖書館。 MFC提供了CArchive類,但還有其他可能更好的工具。

  1. 是。
  2. 它可以,但除非您的需求比它們看起來更專業,否則通用數據庫管理器可能是更好的方法。
  3. 對於這樣的事情,我想到使用可用的(許多)可嵌入數據庫管理器之一。

鑒於你(顯然)主要是為了自我教育,而不是真正的使用,在沒有數據庫管理器的情況下編寫代碼來處理存儲可能是有意義的。 自己編寫所有代碼(稍加注意)通常會導致稍高的速度,但需要花費相當多的額外工作並且通常會失去靈活性。 從學習的角度來看,最大的問題是你學到的很多東西只會在相當狹窄的情況下應用(也就是說,對於大多數典型的應用程序,你想要使用數據庫管理器,所以學習做的事情很少有很多收獲)。

有點還取決於您的預期用途/觀眾。 如果你想一次支持多個用戶,事情幾乎立即變得更加困難(至少這樣做有效)。 如果您只對一個用戶能夠一次訪問數據庫感興趣,那么事情會變得更加簡單。

  1. 這取決於數據,“大量數據”是相對的,你可能會發現有關1000本書的信息可以存儲在幾個MB中,然后將它存儲在數據庫中會有些過分,除非它是一個輕量級的數據庫,如源碼
  2. 我建議堅持使用純文本格式,如CSVXML

為了學習,除了你想學習SQL和關系數據庫設計之外,它不會幫助你使用數據庫引擎。 另一方面,使用數據庫引擎將使開發更快更容易,因為它將為不同的數據創建索引,以幫助您輕松高效地進行搜索。

所以這取決於你。

嗯...

當然,你可以做到這一點。

您正在談論的是回到RDBMS成功之前的時間段。 這並不難,但你可能會學到一些經驗教訓:

  1. 在開始編碼之前 - 或者至少在編寫數據訪問代碼之前,進行數據庫設計就好像要使用數據庫一樣 - 您需要哪些數據? 你能減少你需要的屬性(“字段”)的數量嗎? 您圖書館媒體類型的共性是什么? 等等
  2. 考慮將目錄樹和文件名用作ad-hoc存儲結構的一部分。 如果您需要或想要管理超出程序當前能力的數據,這將把數據直接交給命令行實用程序。 例如,圖書可能都在books子目錄中,在其中,您可以使用ISBN或title作為文件名。 我會使用ls,dir或CLI使用的任何內容來查找自然排序為文件名的內容。
  3. 另一個不錯的選擇是將其置於XML格式中。 可能兩者 - 使用目錄層次結構進行整體數據布局,並將庫條目數據放在XML格式的平面文件中。 這可能會在某些方面變得方便。
  4. 將數據僅以純文本格式作為字符串 - 沒有二進制數據! 同樣重要的是,能夠訪問/操作程序外的數據。
  5. 通過這樣的策略,您可以使用grep,sed,lex等系統工具在需要時使用數據完成無計划的事情。
  6. 有一個功能 - 或編寫一個單獨的讀取器程序 - 遍歷您的“數據庫”並以純文本形式輸出其全部內容,每個條目一行。 您可能有選項可以告訴它輸出什么類型的媒體等。另外,包含一個標志,允許您設置輸出的屬性之間使用的分隔符 - 逗號分隔是一種常見的選擇,但您可能只想要一個空格, carrage return,new line,或者其他任何東西。 如果你把它作為一個可選的標志讓用戶使用任何東西並提供你最喜歡的默認值,它應該沒問題。
  7. 模塊化您的代碼,以便您可以在以后更換存儲策略,如果您願意,而不必重新破解整個程序。 您甚至可以提供多種存儲策略。

這應該做到這一點。

請注意,使用現代計算機硬件管理的數據量不太可能成為性能或空間問題,因此不必擔心節省幾個字節 - 這不值得麻煩。

祝你好運,享受騎行。

我也推薦SQLite

從他們的網頁:

“SQLite是一個實現自包含,無服務器,零配置,事務性SQL數據庫引擎的軟件庫.SQLite是世界上部署最廣泛的SQL數據庫引擎.SQLite的源代碼屬於公共領域。”

“認為SQLite不是Oracle的替代品,而是替代fopen()”

暫無
暫無

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

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