LyChat
Claude та Gemini тепер частина GitHub Copilot https://x.com/OfficialLoganK/status/1851297819581432105 https://x.com/alexalbert__/status/1851300048711365021
Дуже крута новина, Claude 3.5 Sonnet зараз розриває в програмуванні майже будь яку іншу нейронку.
Але Cursor я все одно не кину)
Але Cursor я все одно не кину)
🚀 Більше оптимізації SQL-запитів. В 10 разів швидше, і чому не варто сліпо довіряти ШІ 😅
💡 Історія почалася з того, що я вирішив оптимізувати деякі SQL-запити в боті @gram_piarbot, приблизно 2 місяці тому, і звернувся за порадою до GPT-4o. Модель впевнено порекомендувала використовувати CTE (Common Table Expressions) замість звичайних підзапитів.
⚡️ Спочатку все здавалося нормальним - запити працювали, швидкість начебто та сама, майже не було різниці, може навтіь трохи швидше. Але коли наша база підросла і навантаження збільшилося... От тоді почалося найцікавіше!
🤖 Ось дуже приблизно, як виглядав запит з CTE:
📉 Коли RPS (кількість запитів в секунду) збільшилось, продуктивність почала падати. І тут мені на допомогу прийшла нова модель OpenAI O1 Preview, яка пояснила дещо важливе: CTE дійсно може бути корисним, але тільки в специфічних випадках!
💎 Виявляється, CTE працює як "матеріалізований в'ю" і найкраще підходить, коли:
• Ви використовуєте один і той самий CTE багато разів в запиті
• Вам потрібно робити рекурсивні запити
• Ви працюєте з великим набором даних, який використовується повторно
🔧 В моєму випадку нічого з цього не було потрібно! Тому я переписав запит на корельований підзапит (correlated subquery):
🚀 Результат? Швидкість виконання зросла в 10 разів! А все тому, що:
• База даних тепер обробляє тільки потрібні рядки
• Не створюється зайва проміжна таблиця
• Використовується менше пам'яті
• Оптимізатор постгресу може краще планувати виконання запиту (з СТЕ він йому набагато важче)
📚 Головний урок, який я виніс:
1. Розбирайтеся, ЧОМУ щось працює краще або гірше
2. Не бійтеся експериментувати і міряти продуктивність, використовуючи EXPLAIN ANALYZE на продакшн базі.
🤔 А у вас були випадки, коли поради ШІ виявлялися не найкращими? Як ви перевіряєте такі рекомендації? Діліться досвідом в коментарях!
Ставте 👍 якщо хочете більше постів про оптимізацію SQL та роботу з ШІ!
💡 Історія почалася з того, що я вирішив оптимізувати деякі SQL-запити в боті @gram_piarbot, приблизно 2 місяці тому, і звернувся за порадою до GPT-4o. Модель впевнено порекомендувала використовувати CTE (Common Table Expressions) замість звичайних підзапитів.
⚡️ Спочатку все здавалося нормальним - запити працювали, швидкість начебто та сама, майже не було різниці, може навтіь трохи швидше. Але коли наша база підросла і навантаження збільшилося... От тоді почалося найцікавіше!
🤖 Ось дуже приблизно, як виглядав запит з CTE:
WITH completed_tasks_cte AS (
SELECT UserTask.task_id, COUNT(*) AS total_completions_count
FROM UserTask
WHERE UserTask.completed_at IS NOT NULL
GROUP BY UserTask.task_id
)
SELECT Task.task_id, Task.price
FROM Task
LEFT JOIN completed_tasks_cte...
📉 Коли RPS (кількість запитів в секунду) збільшилось, продуктивність почала падати. І тут мені на допомогу прийшла нова модель OpenAI O1 Preview, яка пояснила дещо важливе: CTE дійсно може бути корисним, але тільки в специфічних випадках!
💎 Виявляється, CTE працює як "матеріалізований в'ю" і найкраще підходить, коли:
• Ви використовуєте один і той самий CTE багато разів в запиті
• Вам потрібно робити рекурсивні запити
• Ви працюєте з великим набором даних, який використовується повторно
🔧 В моєму випадку нічого з цього не було потрібно! Тому я переписав запит на корельований підзапит (correlated subquery):
SELECT Task.task_id, Task.price
FROM Task
WHERE Task.status = 'CREATED'
AND Task.limit > (
SELECT COUNT(*)
FROM UserTask
WHERE UserTask.task_id = Task.task_id
AND UserTask.completed_at IS NOT NULL
)
ORDER BY Task.price DESC
🚀 Результат? Швидкість виконання зросла в 10 разів! А все тому, що:
• База даних тепер обробляє тільки потрібні рядки
• Не створюється зайва проміжна таблиця
• Використовується менше пам'яті
• Оптимізатор постгресу може краще планувати виконання запиту (з СТЕ він йому набагато важче)
📚 Головний урок, який я виніс:
1. Розбирайтеся, ЧОМУ щось працює краще або гірше
2. Не бійтеся експериментувати і міряти продуктивність, використовуючи EXPLAIN ANALYZE на продакшн базі.
🤔 А у вас були випадки, коли поради ШІ виявлялися не найкращими? Як ви перевіряєте такі рекомендації? Діліться досвідом в коментарях!
Ставте 👍 якщо хочете більше постів про оптимізацію SQL та роботу з ШІ!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🐳1
Юзаєте Cursor?
Ось вам скритпик, щоб швидко згенерувати структуру файлів проєкту, щоб він розумів що куди покласти, якщо треба створити нові файли.
Генерите собі json, і потім вкладаєте ось так в контекст до Composer.
Ось вам скритпик, щоб швидко згенерувати структуру файлів проєкту, щоб він розумів що куди покласти, якщо треба створити нові файли.
Генерите собі json, і потім вкладаєте ось так в контекст до Composer.
👍7👎2
Forwarded from BotNews
Bot API 7.11
• Bots can now participate in revenue sharing from Telegram Ads⭐️ – unlocking a new way to help support their development.
• Introduced Paid Broadcasts⭐️ – allowing bots to broadcast up to 1000 messages per second.
• Bots can now send and receive chat-specific hashtags that only show posts and stories from a specific chat when tapped.
• Added a new inline button to let users copy text in one tap.
• Bots can now add media to existing text messages.
• And more, see the full changelog for details:
https://core.telegram.org/bots/api-changelog#october-31-2024
⚠️ Warning: Starting December 1, 2024 messages with video posted in big communities can be delayed by the server until the respective video is reencoded. Read more here.
• Bots can now participate in revenue sharing from Telegram Ads
• Introduced Paid Broadcasts
• Bots can now send and receive chat-specific hashtags that only show posts and stories from a specific chat when tapped.
• Added a new inline button to let users copy text in one tap.
• Bots can now add media to existing text messages.
• And more, see the full changelog for details:
https://core.telegram.org/bots/api-changelog#october-31-2024
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from aiogram live
Full changelog: https://docs.aiogram.dev/en/stable/changelog.html
You can install this version from pypi:
pip install -U aiogramPlease open Telegram to view this post
VIEW IN TELEGRAM
core.telegram.org
Bot API changelog
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
Forwarded from Pavel Durov (Paul Du Rove)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🎯 Передісторія проблеми
У нас є робочий бот з досить високим навантаженням, про який я розповідав вище - RPS досягав від 150 до 200, а іноді й вище. Все працювало начебто нормально, але періодично виникала дивна поведінка: в абсолютно випадкові моменти бот просто "завмирав".
Сидячи на сервері та спостерігаючи за логами, я помічав цікаву картину: логи летять, летять, летять... і раптом повна тиша на 1-5 секунд. В ці моменти бот повністю переставав реагувати на будь-які команди. Спочатку я думав, що проблема в нестачі ресурсів або в обмеженнях конкурентної обробки задач.
- Спершу перевірив усі повільні запити (про які я розповідав у попередніх постах)
- Проаналізував навантаження на сервер
- Почав відстежувати конкретні моменти, коли відбуваються зупинки
Випадково ми помітили закономірність: проблема виникала при специфічному сценарії з двома ботами (в нас тут система мультиботів). У нас була логіка, де при додаванні нового бота в групу, старий мав автоматично видалятися. Для цього використовувався Redis для зберігання ID активного бота.
Саме в процесі очищення кешу (інформації про користувачів групи) після виходу бота з групи і крилася проблема. Я використовував команду KEYS для отримання всіх ключів, які потрібно було очистити.
Коли я спробував виконати команду KEYS в Redis CLI під час активної роботи бота, побачив точно таку ж картину: всі логи миттєво зупинялися!
Виявилося, що KEYS сканує весь простір ключів Redis, що при великій базі даних може зайняти значний час, протягом якого сервер стає менш відгучним.
- Команда KEYS сканує весь простір ключів Redis
- При великих базах даних це може зайняти багато часу
- Це суттєво впливає на продуктивність сервера
- Redis документація прямо не рекомендує використовувати KEYS в production
1. Повністю прибрали використання команди KEYS
2. Замінили її на команду SCAN, яка:
- Працює інкрементально через курсор
- Сканує базу частинами, а не повністю за раз
- Рекомендована для production-середовища
3. Провели додаткове тестування під навантаженням
- Зникли випадкові зупинки в роботі бота
- Стабільна робота навіть при пікових навантаженнях
- Покращилась загальна відгучність системи
- Уникайте команд, що скануют весь простір ключів Redis
- Використовуйте SCAN замість KEYS в production
- Моніторте час виконання Redis-операцій
- Перевіряйте рекомендації Redis щодо production-використання
1. Проведіть аудит свого коду на наявність команди KEYS
2. Замініть її на SCAN, якщо знайдете
- Чи стикалися ви з подібними проблемами?
- Які інші "підводні камені" Redis ви знайшли?
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍10❤3🔥1
Forwarded from Celestia AI News
Imagine a future world where there will be 100x more AIs than there are humans. Is that actually good or bad? Does it even matter if we're fewer than them, but still all of us happy?
https://news.1rj.ru/str/gpt_articles
https://news.1rj.ru/str/gpt_articles
❤2
