В настоящее время я немного поиграюсь с SQLAlchemy, что действительно довольно изящно.
Для тестирования я создал огромную таблицу, содержащую мой архив изображений, проиндексированный хешами SHA1 (для удаления дубликатов :-)). Который был впечатляюще быстрым ...
Ради интереса я сделал эквивалент select *
для полученной базы данных SQLite:
session = Session()
for p in session.query(Picture):
print(p)
Я ожидал прокрутки хэшей, но вместо этого он продолжал сканировать диск. В то же время, использование памяти стремительно росло, достигнув 1 ГБ через несколько секунд. Похоже, это связано с функцией карты идентификации в SQLAlchemy, которая, как я думал, хранит только слабые ссылки.
Может кто-нибудь объяснить это мне? Я думал, что каждая картинка p будет собрана после записи хэша!?