Є дві новини, як в класиці.
Добрі:
Я написав програму на ноді яка може скрапити юзерів з блюскаю по АПІ.
Погані:
Програма геть повільна. Основний ботлнек - це запити до АПІ та збереження даних в mysql.
Є дві новини, як в класиці.
Добрі:
Я написав програму на ноді яка може скрапити юзерів з блюскаю по АПІ.
Погані:
Програма геть повільна. Основний ботлнек - це запити до АПІ та збереження даних в mysql.
Ботлнек в АПІ мені не пофіксати. Залишається 2 варіанти:
1. розпаралелити синхронізацію по воркерам
2. переписати все в раст (і розпаралелити синхронізацію)
я звісно раст євангеліст, а друге навряд сильно допоможе якщо є ботлнек в третіх сервісах
Останнього разу я займався паралелізацією ноди ще коли був трейні. Відчуваю що це буде весело 😅
було би дуже класно аби була можливість отримувати ip і навіть не аналізувати повідомлення
просто забанити всі російські ip 🥰
Якби ж то було все так просто 😁
Але в мене є інша ідея. Блюскай проставляє мову якою був написаний пост юзера. Я планую просто банити всіх в кого останні 10 постів написані на ["ru"]
Ну і всіх хто підписаний на пуб****ста
цікаво, як він ідентифікує суржик
щось блюскай дуже часто ставить "ru" :(
ну добре що ти тестуєш та перевіряєш що він банить
скоріш за все блускай ідентифікує мову якимись сторонніми інструментами
А а зараз в один потік обробляється?
Асинхронно, але в одному потоці. Так.
Якщо там в основному io-bound обчислення (запити в API, запити в БД), то, як ідея, можна спробувати:
- розпаралили за допомогою Promise.all або заюзати async.queue з пакету async
- записувати в базу пачками, для прикладу по 100 записів за один
Сорян, за непрохані поради
Ну і власне можу допомогти з цим, раз почав роздавати поради 🙋♂️
Все ок, але тільки Promise.all не має нічого спільного з паралельними процесами))
Я зараз читаю за worker threads та child threads в ноді. Це для мене тема нова. Тому поки сам посиджу поміркую. Але, якщо що - я вам напишу 🙂
та якщо там немєа cpu-bound обчислень, то промісти менше ресурсів заберуть і з ними легше працювати в ноді, ніж тредами (worker)
власне один event loop буде паралельно оброляти проміси в одному треді, ефективно і швидко обробляючи запити
Event loop апріорі не може нічого оброблювати парарельно. Це однопотоковий процес.
Всі мікротаски створені промісами виконуються асинхронно і почергово.
Якби нода не була однопоточною то писати код на джаваскрипті було б в сотню складніше.
Якби нода не була однопоточною то писати код на джаваскрипті було б в сотню разів складніше.
але якщо у вас запит в бд чи на API блкуская, то event loop переключається на іншу мікрозадачу. Якщо ж немає CPU обчислень, то потік переважно буде сидіти і чекати відповідь, а міг виконувати інші проміси
Але це я лише припускаю, що у вас io-bound задача, можливо ви там щось і обраховуєте
Все так як ви написали.
Але я не можу не евейтити проміси які йдуть до бази даних. Бо мені необіхдно знати айдішники юзерів які я записую.
Єдине місце де я думаю може спрацювати Promise.all - це в самому вверху програми, де я запускаю синхронізацію.
кста, оця зміна має норм пришвидшити, як на мене. замість того, що послідно обробляти буде 100 конкурентних запитів. Можливо syncFollowers чи syncFollows можна ще отимізувати і буде взагалі шик
Да, працює швидше. Дякую! 🖤
Даремно я на вас трохи наїхав. Але все ж таки це не паралельна обробка. 😉
Я порахував, тепер 35с проти 1:52 до промісів. Це десь в 3 швидше стала працювати програма.
Але 35 секунд на обробку 200 юзерів - це все ще надто довго. 🤔
Можливо варіант ще в базу записувати батчами (чи одним запитом), якщо цього ще не робите. Хоча можливо вприається програма у швидкість блускай апі
Проблема в тому що в мене база даних на hdd. Як тільки став записувати в файл (sqlite) на ssd, то швидкість зросла до 5 секунд. Це х23 прискорення.
Коротше, треба збирати гроші на терабайтний ssd. Бо на цьому в мене не вистачить пам'яті щоб деплоїти щось крутіше ніж sqlite.
Буду йти по своїх справах, бо щось я забагато свого носа пхаю, куди мене не просять. Якщо буде потрібна допомога, то радий буду допомогти 💜
За кадром написав клієнт для роботи з АПІ блюскаю, та підключив бдешку, шоп було. Насправді, я не впевнений яка саме бд мені потрібна, тому розпочну з mysql.
Дуже цікава у моно різниця між персональним апі і для провайдерів. В персональному ліміти - 1 запит в хвилину, для провайдерів 10 запитів в секунду. Але провайдерське апі не вертає список банок, можна хіба кожну окремо їх баланс апдейтити
Ого
Оце ви 🤌💪
Гугл транслейт поміг чи там є квота на запити по апі і не дуже?
Насправді не так і складно, маючи робочого бота, зробити додатковий запит по апі до сервісу чатбота.
може я дуже токс, але посадити одного фронтенд джуна і одного фронтенд мідла, які про бекенд тільки шо і чули, на проект де потрібно накидати інтеграції з купою сервіс для синхронізації даних, то дуже погана ідея
Хочу створити телеґрам бота, що автоматично дублюватиме дописи із тґ каналу в блюскай, мастодон, діскорд. Було б добре залучити ще інсту чи твітер, але у них з апі все не так просто. Цікаво буде реалізувати підтримку альбомів, синхронізацію редагувань, обробку завеликих дописів, відповідей
Це треба писати розробникам блюскаю щоб дали документацію по АПІ та якийсь дев акаунт. Точно ні!
Закидую програму в опенсорс, бо в мене не вистачає часу щоб повноцінно довести її до розуму.
Поки що реалізована тільки синхронізація (скрапінг) бази даних.
github.com/mpichka/bsky...
Усе зводиться до двох варіантів:
Перший - що для нормального пошуку я маю або уже мати всі транзакції. Підгружати їх під час пошуку буде не варіант через обмеження на використання апі
Є такий сервіс із кваліфікованими психологами, де можна лишити заявку і, як тільки хтось звільниться, буде можливість отримати 10 консультацій безкоштовно (програма фінансується кимось іншим) ucare.me
Мені дуже допомогло навесні
Так є повна синхронізація але не спішив користуватися певними функціями, поки не мав впевненості що можу потім легко витягнути певні дані з екосистеми браузера до прикладу у інший сервіс
По типу списку читання, нотаток, та цих підписок на #RSS новини
Дякую. Я свій переклад заміняю перекладом з апі Майкрософт азур, там до фіга варіантів перекладу слова
Це саме API дає доступ до певних даних без авторизації?
А за що можуть блокувати типу апки, які спілкуються по API??
Бо загалом я поки маю ідею щодо сервісу для постингу.. як мінімум мені цікаво буде щось подібне зробити)) й схоже їх АПІ в цьому напрямку не складне))
рівно посередині між двома попередніми джинджерами які я пробував
перший був тупо нестерпним, його можна було використовувати як інструмент для катування
другий був дуже смачним
третій смачний, але після нього залишається неприємний післясмак який хочеться запити
Спочатку я користувався звичними програмами як і на своєму основному телефоні, але з часом став помічати лаги під час фонової роботи деяких з них. Особливо це відчувалось після того, як телефон підключався до інтернету раз у день і ВСІ програми із синхронізацією починали її виконувати одномоментно.
Офтоп
ще для просування ідеї необхідності української локалізації для програм і ігор - добре допоможе собі налаштовувати український інтерфейс у тих програмах, де така можливість є.
Мабуть я буду закруглятися з цим пет-проєктом. Зроблю синхронізацію бази даних юзерів + 10~100 останніх постів юзера, для аналізу. І закину його.
Добра новина - програма через яку можна міняти буквально текст гри Сімс 1 все ж існує.
Погана новина - я в душі не гребу як додати українську мову аби гра її зчитувала 💀
Аааа, я просто спершу здивувався звідки ви знаєте, що я дракон за китайським))))
Го насправді прикольна, дуже швидко на ній можна щось написати
Я тільки до поінтерів і інтерфейсів колись давно довго звикав
Система типів не як в Раст звісно, але хоча б є і то вже добре))
Апі Vue3 не дуже стабільні. Десь директиви нормально працюють з composable ref, а десь - треба передавати через .value
Але що таке Booleanish? Чому воно існує?))