Про разработку и ИИ (Ai)
12 subscribers
19 photos
9 links
Свои и переведенные статьи про разработку, в том числе с ИИ
Download Telegram
Пробую создание собственного MCP сервера

Цель - реализовать собственный MCP сервер, который бы позволял получать актуальную документацию по нужным мне фреймворкам и библиотекам. индексировал ее. А также чтобы мог выполнять валидацию соответствия кода основным паттернам .

Итак, написана пробная версия. Что под капотом ?

Ollama - работает (нужно загрузить модель, после первого запуска (около 10-15 мин))/

13 предустановленных источников документации:

- PHP 8.4, 8.5
- Laravel 12
- Vue 3, Nuxt 4
- Filament 4, Livewire 3
- Tailwind CSS 4
- Telegraph, Spatie пакеты

Возможности:

🔍 Гибридный поиск (тест + семантический)
🧠 Семантический поиск через Ollama
📝 Быстрый текстовый поиск через SQLite FTS5
Валидация кода (backend + frontend)
📚 Добавление своих источников через понятный json конфиг

На скринах видно как работет .
Иногда возникают моменты, что индексация занимает продолжительное время (думаю из-за 16гб оперативной памяти у меня)

Чуть позже проект появится на github.com и его можно будет пощупать самостоятельно и опробовать в работе
👍2
Channel name was changed to «Про разработку и ИИ (Ai)»
🗄 MySQL: как мгновенно очистить таблицу на 11 ГБ без боли

Внимание ❗️: предлагаемое ниже решение не для production баз

В одной из баз данных столкнулся с таблицей craft_blitz_elementfieldcaches весом 11 620 МБ, которую нужно было полностью очистить.

Как я определил вес таблиц?

Взвесил таблицы запросом:

SELECT table_name, ROUND((data_length + index_length) / 1024 / 1024, 2) AS MB FROM information_schema.tables WHERE table_schema = 'roke' ORDER BY MB DESC LIMIT 20;


Получил результат:

+------------------------------------+----------+
| craft_blitz_elementfieldcaches | 11620.97 |
| craft_elements_sites | 816.38 |
| craft_blitz_elementcaches | 707.72 |
| craft_blitz_elementqueries | 86.27 |
| craft_elements | 37.67 |
| craft_changedfields | 28.67 |
| craft_entries | 19.64 |
| craft_redirect_404_log | 12.50 |
| craft_blitz_elementquerycaches | 9.03 |
| craft_formie_submissions | 8.27 |
| craft_searchindex | 7.95 |
| craft_revisions | 7.55 |
| craft_entries_authors | 6.55 |
| craft_blitz_caches | 4.20 |
| craft_structureelements | 3.16 |
| craft_redirect_hits | 1.72 |
| craft_projectconfig | 1.52 |
| craft_feedme_logs | 0.64 |
| craft_redirects | 0.52 |
| craft_blitz_elementqueryattributes | 0.42 |
+------------------------------------+----------+
20 rows in set (0.07 sec)


Казалось бы - TRUNCATE и готово. Но не тут-то было:
TRUNCATE на больших InnoDB таблицах может вызвать лавину блокировок и откат транзакций на несколько часов.
Батчевый DELETE - рабочий вариант, но медленный.

Есть элегантный трюк:


-- 1. Создаём пустой клон структуры
CREATE TABLE craft_blitz_elementfieldcaches_new
LIKE craft_blitz_elementfieldcaches;

-- 2. Атомарная подмена — занимает миллисекунды
RENAME TABLE
craft_blitz_elementfieldcaches TO craft_blitz_elementfieldcaches_old,
craft_blitz_elementfieldcaches_new TO craft_blitz_elementfieldcaches;

-- 3. Удаляем старую в фоне — приложение уже не при делах
DROP TABLE craft_blitz_elementfieldcaches_old;


Почему это работает:

RENAME TABLE - атомарная операция.
Приложение моментально переключается на пустую таблицу и продолжает работу.
DROP старой таблицы может идти сколько угодно - он уже никому не мешает.
Если есть внешние ключи - добавь перед rename:


SET FOREIGN_KEY_CHECKS = 0;
-- после rename вернуть = 1


Итог: 11 ГБ "исчезли" за секунды, сервис не заметил ничего.
Этот же приём лежит в основе таких инструментов как pt-online-schema-change и gh-ost.

Примечание: Чтобы в MySQL обновилась информация о весе проблемной таблицы понадобилось дополнительно выполнить


USE craft_db;
ANALYZE craft_blitz_elementfieldcaches;

#mysql #devops #performance #backend #craftcms #blitz_cache #blitz
Постепенно разбираюсь с Golang
👍2😱1
Sergey L.
Photo
Между этим событием и первым сертификатом не так много времени прошло
Продолжаю повышать квалификацию , на этот раз по базам данных
😱1
Выхожу на финишную прямую!
В процессе было разработано несколько сервисов, часть из которых уже опубликовано у меня на гите https://github.com/sleleko
Закончил обучение на курсе профессиональной переподготовки на Golang . Осталось дождаться получения диплома.
Диплом получен
Please open Telegram to view this post
VIEW IN TELEGRAM