Антон Титовец

Антон Титовец 

Open-source энтузиаст

16subscribers

4posts

DevNote #3 | О MongoDB

Привет! Давненько не было DevNote - пора это исправлять. Сегодня расскажу о новой библиотеке и других изменения ОПИ, которые ожидаются в новой версии
Библиотека MongoDB
Похвастаюсь будущей обложкой релиза - нравится
В прошлом обновлении ОПИ произошло небольшое "возвращение к корням": получилась такая хрестоматийная библиотека для работы с HTTP API (с Max через GreenAPI, если быть конкретнее), которых я давно не писал. Уже почти забыл, как это делать. Но сейчас пришло время опять браться за компоненты - на этот раз для работы с MongoDB
Вообще, писать компоненты гораздо веселее, чем работать средствами 1С. Пишу я их на Rust и это, скажем прямо, чистый кайф. Сам Rust очень клевый как язык, с отличной IDE от JB - RustRover - еще лучше, много взрывающих мозг (в хорошем смысле) решений и пакетов. Многих штук потом не хватает в 1С. В частности, я так привык к unwrap_or,() unwrap_or_else() и им подобным (если ОК, то основное значение, иначе - то, что в скобках), что накатал себе функцию ПолучитьИли(Знач Коллекция, Знач Поле, Знач ЗначениеИначе) - получает значение структуры по ключу, а если его нет - значение из третьего параметра. Удобно 

Что касается конкретно mongodb, то для Rust есть официальный драйвер, поэтому все довольно легко и понятно. Есть небольшие препятствия ввиду того, что драйвер асинхронный (т.е. в компоненту, которая чисто синхронная, его так просто не засунешь), но благо я уже работал с таким на компоненте MSSQL. Один раз понять и как с ездой на велосипеде, в общем: вместо одного общего синхронного кода, поднимается дочерний асинхронный процесс с основной логикой, а из синхронной ВК туда отправляются/получаются сообщения о том, что нужно сделать
О размерах компонент
Заметной же проблемой на данный момент является размер компонент и компоненты mongodb в частности. Все компоненты я собираю в 4-х вариантах: Linxu и Windows, x32 и x64. И, в целом, это никогда не было дешевым на мегабайты занятием: обычно такой бандл из 4-х версий весит 2-3 МБ для компонент с серьезными зависимостями или ок. 600 КБ для всякой мелочи, вроде чистого TCP или RCON. Mongo же перещеголял всех - он весит 8 МБ. И может показаться, что это сущие копейки в 2025 году, но надо понимать, что буквально весь остальной код (который на 1С) весит меньше 100 КБ, т.е. 0.3% от всего размера .cfe файла на текущий момент. Еще интереснее все в CLI-поставках в виде WIndows Installer и пакетах для Linux: туда еще и запихивается движок OneScript (который, кстати, с каждой версией тоже растет). Думаю, к какой-нибудь 40-вой версии все это добро перевалит за 100 МБ, что некруто, когда понимаешь, что основная логика, выполняющая 90% работы, занимает там, на самом деле, сущие копейки в виде десятков КБ
Не знаю пока, что с этим делать
Другие обновления
Но не будем о грустном. Лучше расскажу вкратце еще о нескольких крутых штуках, которые появятся начиная со следующего обновления:
- Поддержка прокси для TCP. Результат работы, которая на первый взгляд как будто не видна: я перетаскал всякую общую логику, кочующую из компоненты в компоненту, в отдельные пакеты. Стало гораздо меньше хаоса, а в данном случае - позволило очень легко прикрутить функционал прокси, реализованный в более поздней библиотеке FTP, в более раннюю библиотеку TCP
- Порционная загрузка в модулях HTTP и Yandex.Disk. Когда создавалась библиотека для работы с YD, я не нашел в ее доках никакого упоминания загрузки файлов по частям, поэтому думал, что ее там и нет - в отличие от того же Google Drive. Но оказалось, что такая загрузка все же поддерживается, если использовать Content-Range - стандартный механизм из спецификации HTTP. Тот же Google тоже его использует для Drive, но почему-то удосужился написать об этом в доках, да, Яндекс?
Так как механизм общий, то было решено вынести его в модуль HTTP. Плюс я переосмыслил его с новым опытом - библиотека GD страшно старая и код механизма, соответственно тоже. Так что теперь есть более оптимальная, чем была, загрузка по частям в GD, просто загрузка по частям в YD и возможность использовать этот механизм при работе с любыми совместимыми сервисами через модуль HTTP
- Сокращенные варианты опций в CLI. Небольшая улучшалка для консольного приложения: теперь все опции команды имеют сокращенную версию в виде первой буквы версии полноценной. Если есть две опции, начинающиеся на одну букву, то вторая не сокращается. Выглядит это так:
Ну а пока все!
Если вы здесь впервые, но уже пользуетесь какими-либо моими проектами и хотите их поддержать, попутно узнавая о процессе разработки, то буду рад вашей подписке. Тем, кто уже подписан, большое спасибо за поддержку!
Спасибо за внимание!
Subscription levels4

На кофе

$2.9 per month
Если вы пользуетесь какими-либо моими открытыми разработками и просто хотите легко+непринужденно поддержать эти начинания - данная подписка для вас. Любая помощь очень важна, спасибо вам за это!
P.S. Открывает доступ к скрытому контенту Boosty

На расходы

$7.3 per month
Этот уровень поддержки уже более серьезный. Он открывает доступ в закрытый Telegram-чат, где вы можете задать мне любой интересующий вас вопрос. Мне, в свою очередь, каждая такая подписка серьезно помогает снизить ежемесячные расходы на содержание проектов. За что вам большое спасибо!
+ chat

На развитие

$21.7 per month
Подписка для меценатов. Также, как и предыдущая, открывает доступ к закрытому чату в Telegram. За такую неоценимую помощь буду стараться рассматривать вопросы уважаемых господ в первостепенном порядке
+ chat

Спонсорство

$109 per month
Специальная подписка для компаний, касающаяся OpenIntegrations (ОПИ) и Melezh. Приоритетная поддержка в личных сообщениях и логотип компании в списке спонсоров на страницах этих репозиториев, а также главной странице сайта openintegrations.dev (при желании)
+ chat
Go up