os.walk()
クライアント[0]が作成する各クエリに対して[1]を実行するプロトタイプサーバー[0]があります。
私は現在、次の方法を検討しています。
- このデータをメモリにキャッシュし、
- クエリの高速化、および
- うまくいけば、後でメタデータの保存とデータの永続化への拡張が可能になります。
ツリー構造のSQL は複雑だと思うので、実際に SQLite にコミットする前にアドバイスをいただければと思いました。
この種のデータを処理できる、クロスプラットフォームで組み込み可能またはバンドル可能な非 SQL データベースはありますか?
- 小さな (10k-100k ファイル) リストがあります。
- 接続数が非常に少ない (おそらく 10 ~ 20)。
- メタデータの処理にもスケーリングできるようにしたいです。
[0] サーバーとクライアントは実際には同じソフトウェアです。これは P2P アプリケーションであり、メイン サーバーを使用せずにローカルの信頼できるネットワークを介してファイルを共有するように設計されており、zeroconf
検出に使用し、他のほとんどすべてにねじれています。
[1] クエリ時間は現在os.walk()
、10,000 ファイルで 1.2 秒です
ウォーキングを行う 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("/"))