哪种开发语言对文件操作性能最高
先确认一个问题:关键字命中是指查询词在|分隔符分割的片段中存在即可?还是说完全匹配?看你的代码的话其实是存在即可的。
不过无论怎么看,严格的说你的问题需求似乎并不是做个全文索引。看描述似乎也无关乎分词(毕竟存在就算,例如临水傍山三百寺,要是询问个山三,似乎也该找到的样子,毕竟你的代码里就是这么干的)。
【哪种开发语言对文件操作性能最高】 你的做法非常慢……简单的说,对每一次查询,你都打开文件,然后分行拆分隔符然后用正则去找,最多是加了个问询的缓存,这其实是非常不好的实现方法。
既然规定不用中间件和任何外部服务,当然就要自己实现索引。对于大量字符串求匹配的问题主要包含两类,一类是做DFA或Trie或其它搜索树,另一类是做Hash。
数据规模不大,1000k条文字记录,每条撑死也就几百字,一个几百兆到一两个GB的文件而已,还用不上redis,因为就靠Python自己的内存管理都足够了,这年头总不至于一台电脑没个4GB内存。加上所有记录就一静态文件,在启动Flask之前先把需要的玩意索引好就好,当然也可以单独起个process来做索引。
至于做索引,这个规模用Trie和Hash其实都差的不太多,前者内存友好但是时间复杂度的常系数大一点儿;后者吃内存多一点但是复杂度的常系数稍低。两者都能做成一边索引一边提供查询的能力,总的时间复杂度也都是O(n*m^2),其中n是总文字长度,m是单条片段的最大长度,加一点小优化,如果数据也不是太夸张的每个片段都是最大的200长度,索引个几十秒也就差不多完事了。
■网友
你这个问题,用嵌套循环,肯定效率不高的。
要用中文分词和全文检索的技术去提高速度。
自己搜中文全文检索吧。去看这本书,280页,有小型全文检索的算法。
■网友
如果题主第二个禁止使用的条件去掉的话,建议参考下 flask_whooshalchemyplus + jieba的解决方案
■网友
这个其实是一个讨论题,稍后会用Java,Python,Node三种语言来实现,50万条,考虑网络和IO消耗,会在10ms内完成。
推荐阅读
- 黄金时间■黄金时间丨哪种产品最节水?购买产品请注意这个标识!
- OC为何跌出语言榜前十
- |奥迪开发基于C-V2X校车警示系统
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- 汽车|长安汽车:公司与华为、宁德时代三方正在联合开发智能网联电动汽车平台和产品
- 有点计算机基础的人想尽快找份编程的工作。哪种编程的工作最好找还需要学些啥
- 啥是微信开发WEB前端
- 做苹果开发,想买台MacBook,大家建议买啥
- C语言 指针引用数组的地址问题