私は現在、SQLAlchemy を少しいじっていますが、これは非常に優れています。
テストのために、SHA1ハッシュでインデックス付けされた写真アーカイブを含む巨大なテーブルを作成しました(重複を削除するため:-))。圧倒的に速かった…
select *
楽しみのために、結果の SQLite データベースに対して a と同等のことを行いました。
session = Session()
for p in session.query(Picture):
print(p)
ハッシュがスクロールするのを期待していましたが、代わりにディスクをスキャンし続けました。同時に、メモリ使用量が急増し、数秒後に 1GB に達しました。これは SQLAlchemy の ID マップ機能によるものと思われますが、これは弱参照のみを保持していると私は考えていました。
誰かが私にこれを説明できますか?ハッシュが書き出された後、各Picture pが収集されると思いました!?