我最近在测试用 Go 来操作 SQLite 的性能,用的是这个库( https://github.com/mattn/go-sqlite3 )。
我的测试代码在这个这个仓库的代码,我参考了这个仓库的代码,其测试流程是:
${numberOfCores} * 2
个工人的 dispatcher 。1024 * 1024 * 20
个 People 的实例,一共大约二千万个。我本来以为,用的 dispatcher 会令性能提高,但是我发现读取数据的时间非常长:
root@fw0016589:/home/user/src/github.com/zzxgzgz/SQLite_Multithreading_Go# ./main
2022/03/16 14:41:39 Hello world!
2022/03/16 14:41:39 All 112 workers are running, now you may dispatch jobs.
2022/03/16 14:41:54 Gernated 20971520 people!
2022/03/16 14:50:48 Inserting 20971520 people took 8m54.187231461s
2022/03/16 16:42:39 To query 20971520 people, it took time: 1h51m50.105310237s
读取的 QPS 只有可怜的 20,971,520 / (111 * 60 + 51) = 3,124.947
后来我在网上找到了这个帖子,用帖子里面的代码(补上了帖子里面没有分享的 struct ),测试得到的结果好了很多:
./main
SQLite start
insert span= 62 read span= 107 avg read= 0.0107
这个测试与我的类似,它是插入和读取一千万条数据,然后它的 qps 是 10,000,000 / 107 = 93,457.94
,比我的代码快了约 30 倍。
但是,这个离我的目标还有一些距离,这个帖子声称它可以单机(性能非常高的机器)四百万 qps 。我运行了帖子里提供的性能测试(C++代码),它在我的机器上能达到一百二十万以上的 qps:
Thu Mar 17 10:30:58 PDT 2022 Starting: -vms unix-excl -locking_mode NORMAL (./perftest, /home/user/src/github.com/Expensify/Bedrock/perftest/test.db)
./perftest -csv -numa -numastats -mmap -linear -vms unix-excl -locking_mode NORMAL -testSeconds 60 -maxNumThreads 256 -dbFilename /home/user/src/github.com/Expensify/Bedrock/perftest/test.db
Enabling NUMA awareness:
numa_available=0
numa_max_node=1
numa_pagesize=4096
numa_num_configured_cpus=56
numa_num_task_cpus=56
numa_num_task_nodes=2
numThreads, maxQPS, maxQPSpT
1, 46024, 46024
2, 91274, 45637
3, 137404, 45801.3
4, 180705, 45176.2
5, 225147, 45029.4
6, 272936, 45489.3
7, 314279, 44897
8, 364338, 45542.2
9, 405119, 45013.2
10, 448852, 44885.2
11, 494748, 44977.1
12, 537469, 44789.1
13, 591314, 45485.7
14, 637572, 45540.9
15, 678796, 45253.1
16, 730028, 45626.8
17, 770238, 45308.1
18, 815726, 45318.1
19, 858698, 45194.6
20, 907344, 45367.2
21, 951636, 45316
22, 994060, 45184.5
23, 1041419, 45279.1
24, 1083378, 45140.8
25, 1128111, 45124.4
26, 1169421, 44977.7
27, 1216605, 45059.4
28, 1257847, 44923.1
29, 1260620, 43469.7
30, 1266371, 42212.4
31, 1268080, 40905.8
32, 1266702, 39584.4
33, 1275697, 38657.5
34, 1285441, 37807.1
35, 1279162, 36547.5
36, 1285150, 35698.6
我的问题是:
这个帖子有点长了,谢谢你花时间来阅读。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.