【发布时间】:2010-08-21 10:34:30
【问题描述】:
我有一个原型服务器[0],它为客户端[0] 进行的每个查询执行os.walk()[1]。
我目前正在研究以下方法:
- 在内存中缓存这些数据,
- 加快查询速度,并
- 希望以后能够扩展到存储元数据和数据持久性。
我发现 SQL complicated 用于树结构,所以我想在实际使用 SQLite 之前我会得到一些建议
是否有任何可以处理此类数据的跨平台、可嵌入或可捆绑的非 SQL 数据库?
- 我的列表很小(10k-100k 个文件)。
- 我的连接数非常少(可能是 10-20)。
- 我还希望能够扩展以处理元数据。
[0] 服务器和客户端实际上是同一个软件,这是一个 P2P 应用程序,旨在在没有主服务器的情况下通过本地可信网络共享文件,使用zeroconf 进行发现,并扭曲用于几乎所有其他东西
[1] 查询时间为 1.2 秒,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("/"))
【问题讨论】:
-
如果你不知道的话:有一个 libfam for python 的实现,允许你缓存结构而不会有过时的风险
-
这个StackOverflow question 似乎正在寻找类似的东西。答案可能有些用处。
-
@S.Lott:我在该链接中提供了一个配置文件,正如您所见,posix.stat 是程序的慢速部分,它是 os.walk 的一部分
-
如果我想匹配文件夹名称,我也必须将其与文件夹名称匹配,除非您有更好的主意? (我不想匹配文件的目录,因为这将返回整个子树我只想要它自己的文件夹)至于“原型”也许我应该使用“概念证明”这个词
-
我说过匹配 name 这是文件和文件夹共有的少数东西之一,目前使用 only 的名称我的搜索正如我所说的元数据即将推出
标签: python database nosql embedded-database