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

标签 python database nosql embedded-database

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

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

  • 将此数据缓存在内存中,
  • 加快查询速度,以及
  • 希望以后能够扩展到存储元数据和数据持久性。

我找到 SQL complicated对于树结构,所以我想在实际使用 SQLite 之前我会得到一些建议

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

  • 我有一个小列表(10k-100k 文件)。
  • 我的联系人数量极少(可能只有 10-20 个)。
  • 我也希望能够扩展以处理元数据。

[0] 服务器和客户端实际上是同一个软件,这是一个 P2P 应用程序,旨在在没有主服务器的情况下通过本地可信网络共享文件,使用 zeroconf发现,并扭曲了几乎所有其他东西

[1] 当前在 10,000 个文件上使用 os.walk() 查询时间为 1.2s

这是我的 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 表中!

要第一次创建表,只需从填充函数中删除守卫 if fnmatch.fnmatch(和 string 参数),然后生成目录或文件os.path.join 结果,并使用 cursor.executemany 保存调用的 enumerate(或者,使用自增列,您可以选择)。要使用该表,populate 本质上变成了:

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

其中 stringfoo

关于python - os.walk() 缓存/加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537279/

相关文章:

python - 如何在 IDLE 中给 Python 程序添加断点?

python - 忽略停止迭代

python - MySQL "delayed commit ok done"和性能

javascript - 如何在 mongodb/nosql 中创建用户角色和权限

mongodb - 我在哪里可以下载 64 位 ubuntu/linux 中的 pymongo

database-design - 让应用程序通过 REST Api 直接访问 CouchDB 是否安全?

python - matplotlib 中的 set_xlim、set_ylim、set_zlim 命令无法裁剪显示的数据

database - 如何在 Laravel 中禁用枚举检查

ruby-on-rails - Rails 网络应用程序 : do you create a separate database per account opened?

sql - 免费软件查询生成器