2015-04-23

果然厕所可以帮助人回忆和思考,想到了一种方法,忙了一晚上做完,优化了近一倍速度。

不再直接用io读取数据库文件,而是采用memory mapped file,取文件其中一段要读取的区域直接映射到内存,并设为共享,供各个进程使用。 这个方法和文件一样,不会增加内存用量,但速度确实提升了,讨厌的fseek在瓶颈列表上再也看不到了。 只有50行C代码和50行Lua代码,使用boost的file_mapping和mapped_region。

root@ubuntu:~# ./luajitrun.sh testma100.lua
0.234   sec
0.257   sec
0.249   sec

接下去应该只能靠cache继续加速了,试了下用cache能达到0.002秒,内存是快不过对大容量的数据库不适合...


回主页