ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – os.walk()缓存/加速

2019-08-27 09:58:10  阅读:532  来源: 互联网

标签:embedded-database python nosql database


我有一个原型服务器[0]正在为客户端[0]进行的每个查询执行os.walk()[1].

我目前正在研究以下方法:

>将此数据缓存在内存中,
>加快查询速度,以及
>希望以后允许扩展到存储元数据和数据持久性.

我发现SQL complicated用于树结构,所以我认为在实际提交SQLite之前我会得到一些建议

是否存在可能能够处理此类数据的任何跨平台,可嵌入或可捆绑的非SQL数据库?

>我有一个小的(10k-100k文件)列表.
>我的连接数量非常少(可能是10-20).
>我希望能够扩展到处理元数据.

[0]服务器和客户端实际上是同一块软件,这是一个P2P应用程序,旨在通过本地可信网络与主服务器共享文件,使用zeroconf进行发现,并扭曲几乎其他所有内容

[1]查询时间目前是1.2s,os.walk()在10,000个文件上

以下是我的Python代码中的相关函数:

def populate(self, string):
    for name, sharedir in self.sharedirs.items():
        for root, dirs, files, in os.walk(sharedir):
            for dir in dirs:
                if fnmatch.fnmatch(dir, string):
                    yield os.path.join(name, *os.path.join(root, dir)[len(sharedir):].split("/"))
            for file in files:
                if fnmatch.fnmatch(file, string): 
                    yield os.path.join(name, *os.path.join(root, ile)[len(sharedir):].split("/"))

解决方法:

您不需要保持树结构 – 事实上,您的代码忙于将目录树的自然树结构拆分为线性序列,那么为什么您希望下次从树重新启动?

看起来你需要的只是一个有序的序列:

i   X    result of os.path.join for X

其中X,一个字符串,命名文件或目录(你只是对它们进行处理),i是逐步递增的整数(以保持顺序),结果列,也是一个字符串,是os的结果. path.join(name,* os.path.join(root,& c.

当然,这很容易放在SQL表中!

要在第一次创建表时,只需从populate函数中删除保护,如果fnmatch.fnmatch(和字符串参数),在os.path.join结果之前生成dir或文件,并使用cursor.executemany保存枚举调用(或者,使用自增量列,您的选择).要使用该表,populate基本上变为:

select result from thetable where X LIKE '%foo%' order by i

字符串是foo.

标签:embedded-database,python,nosql,database
来源: https://codeday.me/bug/20190827/1739559.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有