北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 10459|回复: 14

mush访问table、DSN的access、SQLite速度比较

[复制链接]
发表于 2010-5-11 01:00:38 | 显示全部楼层 |阅读模式
最近看一下mush,把地图分别做成了lua table,sqlite和access格式,通过查询房间名获取房间编码,比较了了一下速度,三种方式的速度都很快,但最快的是lua的table,大概有2%的概率为0.0140左右;sqlite有6%的概率为0.0140秒,access有10%的概率为0.016秒,其余都是0秒,用os.clock()函数测。
一共2800个房间。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 01:14:01 | 显示全部楼层
楼主辛苦了,呵呵。LUA的table确是很有特点,努力学习中。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 01:59:51 | 显示全部楼层
原帖由 killunix 于 2010-5-11 01:00 AM 发表
最近看一下mush,把地图分别做成了lua table,sqlite和access格式,通过查询房间名获取房间编码,比较了了一下速度,三种方式的速度都很快,但最快的是lua的table,大概有2%的概率为0.0140左右;sqlite有6%的概率为0 ...


能否知道这个地图是如何做出来的?特别是很多房间都有特定的走法。

能否给点hint?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 09:14:56 | 显示全部楼层
原帖由 killunix 于 2010-5-11 01:00 AM 发表
最快的是lua的table,大概有2%的概率为0.0140左右;sqlite有6%的概率为0.0140秒,


有点笔误吧,lua的table概率应该是12%?
文若终于提笔了,sqlite的中文问题解决了吗?说说心得经验吧。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 09:48:09 | 显示全部楼层
table、sqlite、access 这三个做地图,各有优缺点,真是不好取舍。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 14:26:19 | 显示全部楼层
用什么脚本做地图不重要,用什么算法来做才重要。

[ 本帖最后由 kenzip 于 2010-5-11 03:25 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 20:47:21 | 显示全部楼层
原帖由 kenzip 于 2010-5-11 02:26 PM 发表
用什么脚本做地图不重要,用什么算法来做才重要。


不错。但算法大多是现成有的。实现方法也是比较重要的。用语言提供的feature做比较方便,效率确实问题;用数据库操作效率不错,但是大家知道,现在用的关系型数据库在逻辑思维上与程序员的OO、甚至是structural的思维都不符,还是会带来一些实现上的麻烦的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-5-11 21:03:55 | 显示全部楼层
确实我测下来,lua的table目前是最快的,是2%,不是12%。
http://pkuxkx.net/forum/viewthread.php?tid=11903&extra=page%3D&page=5看sauron的帖子,有地图格式,和计算路径算法。
目前来看,如果地图数据比较少,比如只有房间编码、出口、房间名称的话,luatable是最快的。我现在计算路径地图没有分区域,就一张大地图,原来还担心用luatable比较慢,所以搞了sqlite去select想快点。事实是lua完全能胜任。

sqlite好处是可以塞很多东西在里面,我现在放了房间编码、名称、同名房间编号、同名房间数量、房间描述、坐标、npc等。用来做task、挖金子啥的比较方便。

贴一个我的lua table地图格式:
  1. map={
  2. [1]={ roomid=1,roomname="西门",
  3. roomcx=-1800,roomcy=0,
  4. roomexistsdir={["w"]=507,["e"]=2,},
  5. roomexistscost={["w"]=1,["e"]=1,},
  6. },
  7. [2]={ roomid=2,roomname="西大街",
  8. roomcx=-1380,roomcy=0,
  9. roomexistsdir={["e"]=8,["s"]=4,["n"]=3,["w"]=1,},
  10. roomexistscost={["e"]=1,["s"]=1,["n"]=1,["w"]=1,},
  11. },
  12. [3]={ roomid=3,roomname="飞龙帮总部",
  13. roomcx=-1380,roomcy=-480,
  14. roomexistsdir={["s"]=2,},
  15. roomexistscost={["s"]=1,},
  16. },
  17. [4]={ roomid=4,roomname="红娘庄大门",
  18. roomcx=-1380,roomcy=960,
  19. roomexistsdir={["n"]=2,["e"]=5,},
  20. roomexistscost={["n"]=1,["e"]=1,},
  21. },
  22. }
复制代码


再贴一个sqlite地图信息:

[ 本帖最后由 killunix 于 2010-5-11 09:06 PM 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-5-11 21:28:13 | 显示全部楼层
文若用的什么sqlite图形管理界面?我用的SQLiteSpy没你这个看上去漂亮。
我个人觉得,用sql地图数据,维护起来最简单方便,txt地图数据其次,而lua的地图数据维护起来最复杂。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-5-11 21:47:06 | 显示全部楼层
SQLite Expert  Personal Edition,很好用而且不要钱。
平时luatable应该不需要维护。我sqlite地图主要是用来定位,计算路径还是需要lua table格式的,sql语言好像不能用来计算。
sqlite还有个坏处是从数据库读出来的汉字如果是奇数个,那后面那个是显示不出来的,也就是当初vase说的那个问题。好在暂时不需要从数据库里读汉字。另外通过汉字查询sqlite数据库需要转码,可以利用ddid的那个转码dll来搞定。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-17 07:33 AM , Processed in 0.015558 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表