Здравствуйте, друзья.
Есть такая задача:
- имеем список строк (10-30 символов) - и имеем таблицу в БД sqlite, такой структуры: int uid, string строка, int фейлы
алгоритм такой: - получили строки - внесли их в БД, uid по умолчанию null, фейлы - по умолчанию 0 - обрабатываем строки - те строки, с которыми произошла ошибка - обновляются в БД, инкрементируется счетчик фейлов - все удачно обработанные строки получают свой уникальный uid, чтобы потом их повторно не обрабатывать
таблица нужна затем, чтобы запоминать и отсеивать впоследствии те строки, у которых 5 фейлов и больше а также те, которые были обработаны ранее (имеют uid)
проблема у меня на том месте, где мы получили строки и пытаемся из них удалить те, что в базе имеют по 5 фейлов
я сделал это так:
select data from rows where data in (перечисляем все строки через запятую) and fails >= 5 or uid is not null
т.е. достаем строки, которые в (перечисляем все имеющиеся в начале скрипта строки) и без ошибок, либо уже есть uid
соотв. потом из начального списка удаляем весь этот мусор а оставшиеся обрабатываем
1 список строк в запросе порой получается огромным 2 это неистово жрет память (python3, apache, sqlite3)
как по вашему будет правильнее удалить из начального списка все строки, имеющие фейлы и имеющие ИД, так чтобы не доставать всю таблицу (она может содержать миллионы строк)?
можно проверять каждую строку отдельным запросом, но не сожрет ли это все ресурсы?