[問題][SQL]關於C++使用資料庫

作者: zo6596001 (超帥肥宅)   2019-10-26 17:07:46
開發平台(Platform): (Ex: Win10, Linux, ...)
Centos7,Fedora30
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC,G++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Mysql資料庫
問題(Question):
想詢問一下在C++中使用SQL比較常用的方法。
目前查到了有 SqLite,SQLAPI++,MySQL Connector/C
完全不知道該使用哪一個...
餵入的資料(Input):
一個帶有屬性、圖片檔名的.txt檔,結構如右: [屬性],檔名\n
資料量約有30萬行
預期結果:
能夠快速查找資料。
補充說明(Supplement):
用讀檔的方式找檔名太慢了,30萬行隨便找找都要超過10分鐘。
所以我才想用資料庫,但是C++的資料庫似乎沒那麼簡單。
希望各位能夠給我點建議~謝謝~。
作者: loveme00835 (髮箍)   2019-10-26 17:43:00
你讀檔是怎麼找的?
作者: nh60211as   2019-10-26 20:03:00
要不要先試試把檔名讀進來然後建tree再找
作者: Schottky (順風相送)   2019-10-26 20:28:00
如果拼速比不過 grep 何不直接用 grep XDDDD一個不到 20MB 的小檔案找個十分鐘是有點久但問題絕對不是出在資料庫上
作者: loveme00835 (髮箍)   2019-10-26 22:10:00
依你現在的邏輯, 用資料庫可能也不會完全發揮特性瓶頸在字串比對這裡, 太多餘了, 你可以先做前處理分成幾個只擁有部分資訊的檔案, 這個觀念你在資料庫建表也用得到
作者: Schottky (順風相送)   2019-10-26 22:40:00
我覺得瓶頸不太像是在 strcmp(),兇手另有其人但沒有完整程式碼也沒辦法診斷,我的水晶球送修了增加屬性就算是用資料庫一樣麻煩好嗎,還要加資料庫欄位txt 檔你用 python 寫個程式去每行加上新屬性還不是一樣sqlite 和 mysql 我都用過,你這狀況我會選 sqlite因為你只是要讀 local 資料檔,sqlite 不用架 server反正你有興趣玩 SQL 當然是趁年輕儘量試試看 XD
作者: loveme00835 (髮箍)   2019-10-27 00:11:00
那問題來了: 你覺得時間複雜度真的是 O(n^2) 嗎? 有輪子你也要會開才行
作者: taies (akira)   2019-10-27 00:29:00
想問問每個檔案都要確認存在的目的是? 感覺主要慢在這
作者: loveme00835 (髮箍)   2019-10-27 00:41:00
簡單舉個例子, 創一個 List-a.txt 檔案裡面包含的只有檔名是 a 開頭的項目, 這樣簡單的處理就可以讓搜尋速度快不少, 還有如果你只是想搜尋檔名, 為什麼連屬性也要一併讀進來? 搜尋的方法有很多, 你卻選了最爛的然後說想用資料庫加速, 結果資料庫也是另外建索引阿! 而且前面關鍵字都給了, 谷歌一下看範例應該不難, 怕是怕連搜尋方法都懶得想, 那建表格看 API 文件更難我想你應該也做不了
作者: Schottky (順風相送)   2019-10-27 01:15:00
好好一個 O(N) 的程式被寫成 O(N^2) 是發生什麼事 XD就算你每個檔案都要確認存在,那還是 O(N+N) 而已啊我還是那句,想用 SQL 資料庫就 sqlite 最簡便但問題是 sqlite 解決不了你的 O(N^2)
作者: taies (akira)   2019-10-27 01:44:00
如果只是要練習資料庫的話 我覺得換個例子會比較好至於要換哪種 我沒用過資料庫沒辦法給建議了
作者: Schottky (順風相送)   2019-10-27 10:20:00
怎麼用資料庫,官網就有說明文件和程式範例https://www.sqlite.org/quickstart.html 直接抄就好
作者: klsdf (靜雨澪)   2019-10-29 23:27:00
QT的QODBC可以研究不會編了話應該也有編好的lib能用
作者: tomjpsun (湯姆熊)   2019-11-25 15:07:00

Links booklink

Contact Us: admin [ a t ] ucptt.com