← All posts tagged программазм

stanislavv
лытдыбр программазм nih Хотел поучиться go путём переписывания с питона того, что уже понаписано, посчитал выигрыш в скорости, попытался найти хоть какой-то пример работы с collation и своими функциями sqlite и понял, что а) нет смысла, всё равно 99% времени работы занимает работа с sqlite и это не изменится, б) с примерами посложнее "а вот так мы читаем из базы" — туго.
stanislavv
лытдыбр программазм Про эффективность sqlite и сложные запросы:
Я, конечно, понимаю, что запрос по нескольким зависимостям — тяжелая штука, но почему она настолько тяжелая, что таймаут в 3 минуты срабатывает на некоторых местах?
Плюнул, сделал вместо одного запроса к трём таблицам три запроса (получение id, получение инфы + получение инфы), получил на порядок бОльшую скорость.
stanislavv
лытдыбр программазм nih С одной стороны, добился кратного ускорения пересоздания базы, с другой — надо будет переделать запросы в вебморде — теперь тормозят они (впрочем, база на usb-диске не способствует скорости).
stanislavv
лытдыбр программазм nih Поправил структуру БД, теперь надо проверить скорость на реальных данных, ибо на тестовом огрызке особо ничего не видно.
Запустил пересоздание БД на домашнем хранилище и понял, что жара + thermald.sh влияют на скорость больше, чем я думал и пересоздание займёт несколько суток, в течение которых вебморда будет говорить internal error.
Ок, запустил на тестовом куске python3 -m cProfile, поправил падения (в принципе, логичные, но почему раньше не падало?), запустил ещё раз, получил, что 890 секунд из 909 скрипт проводит в sqlite3.Cursor.execute, что вобщем-то логично, но оптимизации не поддаётся.
Похоже, если оставаться на sqlite, стоит создавать бд во временном файле и потом уже класть в место, доступное для вебморды. Ну или уйти на mysql/mariadb, которую почему-то не хочется запускать на хранилище.
stanislavv
лытдыбр программазм nih Утром, слушая какой-то доклад с ютуба, практически не просыпаясь сделал просмотр по архивам (как суррогат "что нового") в NIH.
Проснулся под конец доклада, посмотрел пустой вывод flake8 (что для меня странно, ибо нихрена не программист), на всякий случай проверил, что показывает fbreader на телефоне и браузер на компе и запушил в свой гит.
Если вечером вспомню — запушу и в гитхаб, но это сильно не факт.
stanislavv
лытдыбр программазм nih Обнаружил автора, у которого должен находиться ник, а не находится. Пока исправил в github.com
Заодно выяснил, что зря полагался на память — уже не помню, как правильно пишется поле в fb2, отчего сделал несколько лишних проходов по архивам (на апельсинке это медленно)

Также в процессе капнул водой на курсорные клавиши, отчего в настоящий момент не работают стрелки вверх/вниз. Посмотрим, что будет завтра, ибо были и прекратились интересные глюки с одновременным нажатием пробела и стрелки налево.
stanislavv
лытдыбр программазм Как предлагали — проверил взятие аннотаций прямо из fb2, а не из базы. Обломался — на 50 книгах на странице nginx не дождался данных от бекенда. Всё-таки тупо взять из базы быстрее, чем распаковать 50 раз и потом ещё и распарсить.
stanislavv
лытдыбр программазм nih На ...й месяц Зоркий Глаз заметил, что нужные метаданные есть в flibusta_fb2_local.inpx
Примерно после предварительной обработки половины из ~1800 явно кривых файлов.
Вобщем, теперь а) сии метаданные используются, б) являются основным источником, в) если у меня вся база загрузится — переставлю несколько строк местами (на случай наличия замены, если всё же найдётся косяк в исходных данных) и таки выложу на гитхаб.
Основные недоделки:
— Поиск нескольких слов (вероятно, доделаю на неделе, если на работе чего не привалит)
— Поиск с игнором всякой диакритики (типа "е" == "ё")
— Нормальное логирование утилиты загрузки данных в БД с разными уровнями (когда-нибудь сделаю, если не забью)
— Чистка БД от авторов/серий без книг (авторы вроде чистятся, но особо не тестил). Впрочем, БД из предварительно подготовленных данных пересоздаётся довольно быстро.
— Замена латиницы на кирилицу в русских названиях (тексты из фидо страдали заменой букв "Н", "р" и т.п., возможно, неактуально в связи с последними изменениями)
— Парсинг некоторых странных файлов (возможно, неактуально, надо проверить)
Что умеет:
— Брать данные из флибустовского архива и засовывать в sqlite для вебморды (+сопутствующее)
— Отдавать данные по opds так, как это понятно fbreader (как ленивый человек — тупо проверил curl, что отдаёт флибуста)
— Простейший веб-интерфейс (по сути — opds, конвертированный в html, позволяет практически то же самое, что и opds + чтение в браузере через конвертацию в html)

И да, код — говно, я знаю :-)
stanislavv
лытдыбр программазм nih Добавил не самый сложный поиск в морду к книгам. Андроидный fbreader воспринимает нормально.
Попытался сделать поиск и по аннотациям — обломался, на полной базе 2/3 запросов — таймаут.
Теперь надо сделать поиск не по одной подстроке, а по нескольким (чтоб находило не только "Толстой Лев", но и "Лев Толстой" по тому же запросу) и пагинацию, про которую забыл, а зря.
stanislavv
лытдыбр программазм Запилил себе на апельсинку thermald.sh
Засунул в крон на каждую минуту, убедился, что частоту оно повышает.
Теперь не могу убедиться, что понижает — почему-то температура не поднимается выше порога. Ну ок, ща руками буду поднимать.
stanislavv
лытдыбр программазм Мой NIH-opds-сервер заработал практически как ожидалось.
Но есть нюанс — в MVP я не озаботился оптимизациями, а придётся — 700+МБ базы с таблицей типа "всё в одном" не позволяют быстро увидеть список книг. Как минимум, description надо вынести в отдельную таблицу.
stanislavv
лытдыбр программазм Хренотень для fb2 в zip в первый раз прошла по всем доступным мне fb2 без ошибок.
Похоже, уже можно немножечко думать на тему "правильная организация БД".
Текущий объём БД в sqlite3 — ~730МБ.
stanislavv
лытдыбр программазм Соорудил себе сервис для opds поверх zip флибусты. Он даже работает местами, надо отладить выдачу по авторам, где я выяснил, что sql у sqlite всё ж немного отличается от остальных, и таки сделать скачивание, чем ещё даже не занимался.
Но, блин, запускать его пока негде — на вдс тупо некуда положить 350+ ГБ архивов, дома — домашний сервер строится с нуля и, к тому же, к нему ещё хз когда кабель протяну от роутера, на работе — это на работе, там я ещё могу что-нибудь своё поделать, но сервис запускать надо на своих ресурсах.
Заодно, кстати, выяснил, что для разбора того xml, что в fb2 лучше сразу брать связку BeautifulSoup и xmltodict, ибо fb2 слишком часто — кривые даже на мой взгляд, не говоря уже о парсере.