flylinkdc писал(а):При каждом запуске программы делать такое будет дорого...
Ну а как по другому делать первый запрос? Надо ведь откудато брать изначальный список. Я только что сделал стресс-тест с тем что есть, вообще никаких проблем. Сервер AVDB работает стабильно, он сам по себе мощьный - шестиядерный процессор с кучей памяти, и канал - безлимит со скоростью в гигабит через интернет при хорошем пиринге двух концов. Да и подумал что в будущем всеравно троянщиков не станет так много как миллионы, в DC ограниченое количество пользователей, их не будет больше чем уже есть или было 10 лет назад... Особенно если начнем все дружно подчищать DC.
Есть идейка для тех кто не хочет качать много байтов из AVDB, сейчас добавлю функцию
avdbloadbz, возврат будет идти с компрессией BZIP - что уменьшит размер базы, но повысит использование системных ресурсов которые понадобяться для сжатия - еще можно замутить кэш чтоб не сжимать так часто.
flylinkdc писал(а):1. Первый запуск и локальная база sqlite пустая - шлем запрос с time =0
2. Парсим ответ и сохраняем в бд - маркер максимального time (time из системы вообще никогда не берется)
3. Повторный запуск - читаем максимальный time из локальной базы и запрашиваем уже с этим значением
получаем все записи которые поменялись на сервере снова парсим и обновляем макс-time
Отлично, и я рад что ты используешь свой
User-Agent, это важно для статистики.
flylinkdc писал(а):2. Записи не корректируются - например поменялся размер шары/ник и time - остался старый
Запись, а точнее шарабайт и штамп времени, обновляются если размер шары изменился а ник и ип тот же. Новая запись добавляется если ник или ип новый, если уже не существуют. Повторяю, уникальность каждой строчки состоит из
ник+ип вместе. Именно так работает мой клиент загрузки базы - Ledokol, если есть новые строчки в повторной загрузке базы, то они могут содержать обновившуюся шару у уже существующего юзера, потому при парсинге ты должен смотреть если в твоей копии базы уже есть такой юзер, и обновлять если требуется, либо добовлять если нет. Вот пример:
Код: Выделить всё
[2014-09-03 14:43:23] <# Feed> [03] Loaded 2 of 2 with totally 1102 items: AVDB
...
[2014-09-03 15:13:23] <# Feed> [03] Loaded 1 of 1 with totally 1102 items: AVDB
В данном случае количество строк в локальной базе не изменилось после загрузки последней новой строки, это и говорит о том что изменился размер шары у уже существующего юзера.
flylinkdc писал(а):3. Записи добавляются в "серединку" или всегда time растет?
time всегда ставится свежий при обновлении и добавлении,
time - это время сервера в секундах по стандарту Unix в момент добавления и обновления.
flylinkdc писал(а):4. Записи в базе удаляются? если да, то как мне об этом узнать...?
Возможно, пока не приходилось но я думаю будут случаи когда юзер который не нарочно заразился вирусами, очистит свою шару от вирусов и попросит снять бан. Когда такой момент наступит будем изобретать функцию для удаления из общей базы. А насчет того как тебе это узнать - никак, твоя локальная база ведь не будет храниться вечно, рано или поздно ты уйдешь в ребут либо выключишь комп, а когда заного запустишь - ты получишь новый список без того самого юзера что помылся.