Comments 21
Хорошая работа.
А мы в прошлом семестре подобное на octave/matlab писали (правда реализацию того же PageRank и прочего требовали писать с нуля, матричными операциями и считая eigenvalue/vectors).
В этом семестре планируем взяться за hadoop, ибо сети для научных исследований будут большими, на одной машине все не просчитать. Хотя я честно говоря фанат пайтона, потому сегодня начал читать как подружить hadoop и python. Или использовать какой нибудь pig latin.
www.mathworks.com/discovery/matlab-mapreduce-hadoop.html?refresh=true
Потратил вечер на то чтобы заюзать этот код. Разочаровался. Проблемы возникли следующие:
- При установке rabbitmq, он автоматически стартует сервер, а Celery при этом (при незапущенном vhost?) ругается на отсутствие django, что ни разу не способствует дебагу. Но это быстро решилось, хотя и подпортило настрой.
- Первый запуск упал с каким-то эксепшном. Когда подписал try/catch, выяснилось что VK возвращает ошибки "Too many requests" (может всё-таки стоило допустить возможность такого ответа и выводить что-то типа "нужно больше токенов"?)
- Запустил celery с ограничением в 2 воркера. Не помогло
- Запустил celery с ограничением в 1 воркер. Безрезультатно, два запроса getFriends всё равно валятся. В этот момент я понял, что вообще ничего не понимаю.
Я не понимаю главного — Как во всей этой супер распределенной системе выдерживается интервал между запросами? Может это где-то в rabbitmq или в celery должно настраиваться? Может где-то не хватает time.wait() или "while request_failed: retry()"? У меня всё валится и я не понимаю почему не должно… Ну нету у меня четырех токенов, я готов подождать, но блин, не работает же. Вернуться на первую версию — да, можно, но речь о том что ЭТА не работает. Да, возможно, я не совсем по назначению использую её, но если там всё Настолько Вероятностно и без всякой защиты, есть немалый шанс словить такой вот "Too many requests" на супер масштабном и дофига распределенном запросе, который длится уже долго. И потерять кучу данных.
И последний пункт, вызывающий у меня негодование. Нет, может я чо не понимаю, но кажется, вы кроме ID в крутом распределенном виде ничего не запрашиваете. То есть собственно информативность вершин графа стремится к нулю. И при этом вы сравниваете быстродействие своей системы с быстродействием моей (у которой в вершинах АВАТАРКА, а алгоритм абсолютно линеен и без хранимых процедур). Короче, ящитаю, что AkelPad качается и устанавливается в 100500 раз быстрее, чем ваш этот TeX Live. Утрировано, но всё-таки, без аватарок (и ДАЖЕ без банального plaintext имени), мой код будет работать никак не в 60 раз медленнее. А если заюзать хранимые процедуры, то и того быстрее будет. Попахивает грязным маркетингом. Фу фу фу.
Ни разу не хочу сказать, что методы увеличения быстродействия не крутые — они очень крутые и очень перспективны для выкачивании аватарок, но при сравнении, пожалуйста, решайте аналогичные задачи. Немного неприятно когда бесконечно крутые технологии Wolfram представляют тормозными, хотя я в своем исследовании ни строчки не написал для увеличения быстродействия, потому что цель была не в быстродействии, а в результате. Я хотел получить ВИЗУАЛЬНО ИНФОРМАТИВНЫЙ граф, а не получить хоть какие-то данные быстро.
И я даже хочу отправить няшные пул-реквесты (потому что тоже обожаю Python), но мне мешает непонимание, описанное выше. Я не представляю себе как через эти очереди гарантированно добиться двух запросов в секунду… Вот. А если нельзя, так надо дальше думать же! Плохие инструменты, код небезопасен. Хотя бы костыль вставить какой-нибудь, типа "while request_failed: retry()"...
При установке rabbitmq, он автоматически стартует сервер, а Celery при этом (при незапущенном vhost?) ругается на отсутствие django, что ни разу не способствует дебагу. Но это быстро решилось, хотя и подпортило настрой.
Может у тебя какая-то другая Celery?)
Первый запуск упал с каким-то эксепшном. Когда подписал try/catch, выяснилось что VK возвращает ошибки «Too many requests» (может всё-таки стоило допустить возможность такого ответа и выводить что-то типа «нужно больше токенов»?)
Запустил celery с ограничением в 2 воркера. Не помогло
Запустил celery с ограничением в 1 воркер. Безрезультатно, два запроса getFriends всё равно валятся. В этот момент я понял, что вообще ничего не понимаю.
Нужно много токенов, об этом было написано. Иначе все равно можно упереться в ограничения от ВК.
Как во всей этой супер распределенной системе выдерживается интервал между запросами? Может это где-то в rabbitmq или в celery должно настраиваться?
Не выставлял интервал, но инфу можно найти в манах.
И при этом вы сравниваете быстродействие своей системы с быстродействием моей (у которой в вершинах АВАТАРКА, а алгоритм абсолютно линеен и без хранимых процедур)
Аватарку получить — не думаю, что произойдет большая просадка по perfomance. Про хранимки тебе писали в комментах, никто не мешал их заюзать.
Я хотел получить ВИЗУАЛЬНО ИНФОРМАТИВНЫЙ граф, а не получить хоть какие-то данные быстро.
Опять же, получить аватарку не проблема
Ничего не имею против Wolfram, он очень крут, и спасибо за коммент и время
А запарился я, потому что мне показали https://gephi.org
Давайте всё-таки сделаем нормальную качалку друзей друзей? Я прям очень хочу потыкать этот граф в Gephi
Ого, перечитал свою статью, оказывается, 119 секунд — это действительно только getMutural с чистыми ID. У меня было подозрение, что на хабре не бывает негатива, но как-то не щёлкнуло… Моя любовь к необдуманным действиям не знает границ…
Приношу глубочайшие извинения за наезд, задачи решаются аналогичные. Прошу игнорировать абзацы n-2 и n-1 в сообщении i-2
Анализ дружеских связей VK с помощью Python. Продолжение