C_and_CPP 板


LINE

开发平台(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++的资料库似乎没那麽简单。 希望各位能够给我点建议~谢谢~。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.45.73.249 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1572080868.A.9A3.html
1F:→ loveme00835: 你读档是怎麽找的? 10/26 17:43
fgets 去找跟 inString 一样的字串 (inString 是使用Socket接收) #define FILELIST "./../db/list.txt" ...(略) FILE *fp = fopen(FILELIST,"r"); char lineStr[64]; // put every line here. if(fp){ while(fgets(lineStr, sizeof(lineStr), fp) != NULL){ removeNextLine(lineStr); if(strcmp(lineStr,inString)==0){ printf("SQLHandler::checkExist: file exist.\n"); fclose(fp); return 1; } } }else{ printf("error: SQLHandler::checkExist: File open faild.\n"); } return 0; ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/26/2019 18:48:03 ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/26/2019 18:51:26
2F:→ nh60211as: 要不要先试试把档名读进来然後建tree再找 10/26 20:03
3F:→ Schottky: 如果拼速比不过 grep 何不直接用 grep XDDDD 10/26 20:28
4F:→ Schottky: 一个不到 20MB 的小档案找个十分钟是有点久 10/26 20:31
5F:→ Schottky: 但问题绝对不是出在资料库上 10/26 20:31
对吼,之前写Python有做过,突然想起来。 ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/26/2019 21:30:35 可是之後如果我要对每一行多加一个属性的话,那麽不是很麻烦吗...? 我还是比较想要用资料库,这样以後想增加功能比较简单。 ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/26/2019 21:50:58
6F:→ loveme00835: 依你现在的逻辑, 用资料库可能也不会完全发挥特性 10/26 22:10
7F:→ loveme00835: 瓶颈在字串比对这里, 太多余了, 你可以先做前处理分 10/26 22:11
8F:→ loveme00835: 成几个只拥有部分资讯的档案, 这个观念你在资料库建 10/26 22:12
9F:→ loveme00835: 表也用得到 10/26 22:12
10F:推 Schottky: 我觉得瓶颈不太像是在 strcmp(),凶手另有其人 10/26 22:40
11F:→ Schottky: 但没有完整程式码也没办法诊断,我的水晶球送修了 10/26 22:41
因为我在建立List.txt,先有30万个档案名称的回圈,每一个档案都要确认是否存在 List 里面。 而且是单执行序,碰上CPU bound 所以复杂度大概是O(n^2)
12F:→ Schottky: 增加属性就算是用资料库一样麻烦好吗,还要加资料库栏位 10/26 22:42
13F:→ Schottky: txt 档你用 python 写个程式去每行加上新属性还不是一样 10/26 22:43
14F:→ Schottky: sqlite 和 mysql 我都用过,你这状况我会选 sqlite 10/26 22:47
15F:→ Schottky: 因为你只是要读 local 资料档,sqlite 不用架 server 10/26 22:48
16F:→ Schottky: 反正你有兴趣玩 SQL 当然是趁年轻尽量试试看 XD 10/26 22:55
我是资管系毕业的,修过一年资料库,就是不想没事造轮子,所以才想用资料库阿... 我的问题是C++的资料库Library太多种了,不知道哪个比较好用。 ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/26/2019 23:32:11
17F:→ loveme00835: 那问题来了: 你觉得时间复杂度真的是 O(n^2) 吗? 有 10/27 00:11
18F:→ loveme00835: 轮子你也要会开才行 10/27 00:11
就是想问其他人都怎麽开...
19F:→ taies: 想问问每个档案都要确认存在的目的是? 感觉主要慢在这 10/27 00:29
防止重复而已,但是我还没优化。
20F:→ loveme00835: 简单举个例子, 创一个 List-a.txt 档案里面包含的只 10/27 00:41
21F:→ loveme00835: 有档名是 a 开头的项目, 这样简单的处理就可以让搜寻 10/27 00:42
22F:→ loveme00835: 速度快不少, 还有如果你只是想搜寻档名, 为什麽连属 10/27 00:42
23F:→ loveme00835: 性也要一并读进来? 搜寻的方法有很多, 你却选了最烂 10/27 00:43
24F:→ loveme00835: 的然後说想用资料库加速, 结果资料库也是另外建索引 10/27 00:44
25F:→ loveme00835: 阿! 而且前面关键字都给了, 谷歌一下看范例应该不难 10/27 00:45
26F:→ loveme00835: , 怕是怕连搜寻方法都懒得想, 那建表格看 API 文件更 10/27 00:46
27F:→ loveme00835: 难我想你应该也做不了 10/27 00:46
这样的确快很多,可是我还是想问问大家都怎麽在C++里用资料库... ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/27/2019 01:20:31
28F:推 Schottky: 好好一个 O(N) 的程式被写成 O(N^2) 是发生什麽事 XD 10/27 01:15
29F:→ Schottky: 就算你每个档案都要确认存在,那还是 O(N+N) 而已啊 10/27 01:21
30F:→ Schottky: 我还是那句,想用 SQL 资料库就 sqlite 最简便 10/27 01:23
31F:→ Schottky: 但问题是 sqlite 解决不了你的 O(N^2) 10/27 01:23
32F:→ taies: 如果只是要练习资料库的话 我觉得换个例子会比较好 10/27 01:44
33F:→ taies: 至於要换哪种 我没用过资料库没办法给建议了 10/27 01:45
我其实是在练习写Socket,这是伺服器端的程式。(先不要考虑安全性) 我希望Client端能够传送"g_l"时,能够制作出档案清单并回传。 传送"r_1111"时,能够收到名称为1111的图片。 还有,假设未来我想搜寻属性有"双马尾"及"兽耳"的图片,之後能够快速的制作出清单。 未来练习OpenCV的时候,可以增加栏位,把图片是否有人脸、图片的色调都加进去。 现在只是卡在造轮子有点麻烦,但是又不太清楚C++怎麽用资料库而已。 ※ 编辑: zo6596001 (114.45.73.249 台湾), 10/27/2019 02:00:45
34F:推 Schottky: 怎麽用资料库,官网就有说明文件和程式范例 10/27 10:20
35F:→ Schottky: https://www.sqlite.org/quickstart.html 直接抄就好 10/27 10:22
36F:→ klsdf: QT的QODBC可以研究 10/29 23:27
37F:→ klsdf: 不会编了话应该也有编好的lib能用 10/29 23:28
38F:→ tomjpsun: https://github.com/viaduck/mariadbpp 还不错用 11/25 15:07







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP