flask-mdict
flask-mdict copied to clipboard
Query Speed
Thanks for this great tool!
The query speed is relatively slow when there are many dictionaries or a dictionary with many entries.
I found a project, django-mdict, which uses cython and other techniques. It's faster than flask-mdict on my test.
Is there any way to improve the query speed of flask-mdict?
目前没有计划,有几点原因:
- 没有经济利益。个人使用,免费;企业级多人使用,不知那家会采购,而且词典版权难以解决。
- 个人使用,最多10本词典同时查询,稍慢,但可忍受。查询结果过多,会出现查看结果困惑。基本能满足个人用户使用。
- 词典查询速度,受两方面影响。一是词典数目,二是词典词条数目。词典数目,程序已经提供查询时词典选择;词条数目解决方案可参考 pdawiki 上的维基百科。
关于 django-mdict 的优化,就要说说查询的基本过程: 一,WEB接口接受用户查询指令; 二、服务端查找词条数据库(db.sqlite3,我看 django-mdict 也在使用),找到对应的词典文件,释义在文件中的位置; 三、读取 MDX 文件,解码; 四、将解码后的内容返回。
假如忽略网络延迟造成的影响,那么影响速度的主要在,第二,第三步。
词条数目影响第二步,可调整词典数目解决。注意 db.sqlite3 也是本地硬盘文件,查找词条也受到硬盘读写速度影响,并且此数据库是轻型数据库,针对小数据量数据,不能应对大型数据。
文件读取,解码速度影响第三步,可使用更高的CPU,更快的硬盘来解决。
django-mdict 的 cython 优化,仅加速了代码的运行速度,对第二,第三步都有所提高,但提高有限,没有从根本上解决问题。这是由于 MDX 文件查询方式决定的,是硬伤。
想要从根本解决问题,做真正的多人同时,高吞吐量查询,需要改变查询方式,抛弃 MDX 查询方式。
一年前,我就已经做出项目,但项目是私有的,名字叫 Flask-DBDict。但还是那句话,没有经济利益,没有那家企业会购买。 我在 pdawiki 上有帖子 https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=45172&extra= 可参考