Задать вопрос
  • Как правильно реализовать FullRestApi на yii2?

    @Mylistryx
    Наверное правильней на уровне роутов.
    'GET some' => '/site/index',
    'PUT some' => '/site/create',
    'POST some' => '/site/update'
    ....
    Ответ написан
    Комментировать
  • Как справиться с проблемами на некоторых моделях телефонов?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    К сожалению, Андроид такая штука, что на каждом телефоне есть свои крайне специфичные глюки. Например, одно из моих приложений упорно вылетает на Honor/Huawei, причем не всегда и не на всех. Но на Xiaomi, Samsung, Sony, LG, BQ, Highscreen и прочих работает стабильно. Решение пока так и не нашел, учитывая, что у меня самого Honor/Huawei нет, а используемые библиотеки более чем стандартны - из чистого Андроида, даже не GMS.

    По вопросам:
    1. Единственный вариант из-за большого зоопарка, и то не факт что на конкретной версии прошивки в конкретной стране не будет глюков.
    2. Тестируют долго и упорно, на всех устройствах, плюс анализ логов при сбоях на релизных версиях.
    3. Компоненты то есть, наверное, только это не гарантия, что в новой прошивке производитель ничего не сломает.
    4. Старайтесь максимально детально отрабатывать любые потенциальные ошибки, даже через банальное try-catch
    5. Не нужно, со временем нужный навык прокачается, а если просто так зубрить, то оно все равно без применения быстро забудется. Но это не значит что читать для себя интересные статьи про типичные ошибки не нужно.
    Ответ написан
    Комментировать
  • В 40 лет планирую поменять сферу деятельности с 1С на Android? Сколько на старте смогу зарабатывать?

    @ScyTer
    18 лет в 1С для программирования на почти любой другой технологии - почти нулевой опыт, разве что алгоритмика развита должны быть хорошо, возможно, архитектура, но вряд ли это можно перенести мобильную платформу. Навыков ООП нет. В общем, опыт крайне не релевантный.

    По Андройду советую строго Kotlin,: на Java будешь писать на старых (с точки зрения Андройда) технологиях, то есть тоже не релевантный опыт. Если планы на иос есть, то можно думать о Flutter сразу.

    Карта: открывай любые курсы, бери там список тем и на каждую уделяй часа 3 на теорию, потом часа 3 на практику. Но, вообще, вопрос странный для айтишника с 10+ стажем.

    И пиши приложения. Начиная от простых, вроде, будильника или погодного приложения и продолжая уже чем-то более сложным, желательно, клиент-серверным.

    Про Unity вообще отдельная тема, это, скорее, гейм-дев, а не мобильная разработка. Т.е. опыт будет релевантный лишь для Unity-вакансий.

    Возраст - не проблема. Зп никто выше 1к$ точно сразу не даст. Но за год-полтора, при целеустремлённости и нормальной конторе (что первое бывает не всегда) можно до 2к$ подняться.
    Ответ написан
    1 комментарий
  • Какую конфигурацию выделенного сервера выбрать для Autocad?

    avc
    @avc
    Инженер и программист
    Видеокарты Автокад почти не использует. Только для отображения в визуальных стилях с затенением, но ими мало кто пользуется и при этом софтовая прорисовка (при выключеном 3d-ускорении) стабильней и быстрее (но выглядит страшненько). Встроенного видео достаточно.
    Многоядерность вообще не используется - Автокад чисто однопоточный (кроме рендера, который вообще никто не использует). Так что требуется максимальная производительность одного ядра, быстрый системный диск, большой дисковый кэш (многие команды идут через сохранение файлов).
    А вот причем тут сервер - я тоже не понял. Я в принципе на серверных материнках Автокадом пользуюсь: Xeon E3-1270v3. Просто такие у меня десктопы. Проблем нет.
    Ответ написан
    Комментировать
  • Какая самая перспективная и востребованная отрасль в С#?

    @spaceatmoon
    Вначале писал как ответ на ваш вопрос про разные языки и решил отдельным ответом сделать.


    Со своей стороны скажу php, он очень востребован. Простой язык, половина возможностей носят рекомендательный характер и сильно зависит от команды, в частности от их силы в программирование. Мне попадались хорошие ребята, а попадали очень не очень, но всё конечно же зависит от ваших навыков.

    Минус PHP в отсутствии однородности экосистемы. В РФ есть 3 главных фреймворка Symfony, Laravel, Yii2 и дальше 0.5% другие. Каждый из них тянет лямку на себя и составляют долю по грубому 33%. Каждый фреймворк богат на возможности, решают одну и туже проблему, но это всё равно что react/vue/angular. Свои подходы, методы и быть профессионалом в каждом нельзя. Соответственно список вакансий уже не такой большой как кажется, ведь потом явно появится какое-то предпочтение. Например у меня в blacklist однозначно стоит Yii2.

    Также минус PHP в его направленности чисто на веб. Рано или поздно устаешь и хочешь возможности сделать обычное Windows приложение, игру, бинарник. Ведь PHP сильно зажат в этом плане, даже не так, там в принципе ничего нет на эту тему и не будет никогда. Только веб, но он прекрасен местами.

    Ещё можно рассмотреть Python/Django.

    В любом случае стоит ориентироваться на удалённую работу если вы не в СПБ и Москве. Лично в моём мухосранске какую технологию не выбери, максимум 1-3 контора нормальная. Остальные что-то мутят или в подвале сидят.

    Выбирай по зову сердца, иначе тошнить уже будет на 2 неделю. Я сейчас изучаю C# в частности asp.net, wpf. Даже по этим направлениям информации выше крыши.
    Ответ написан
    Комментировать
  • Что делать с этой формой?

    @Dementor
    программист, архитектор, аналитик
    Создал форму, сохранил, запускаю 1С Предприятие, нажимаю Файл\Открыть. Открывается моя форма.
    Поздравляю - вы стали программистом 1С!

    Это всё для чего она нужна?
    Окружающему миру ваша форма в таком виде даром не нужна - увеличивает энтропию и приближает к гибели вселенной. Но вы можете наполнить свою форму полезным содержимым.

    Для чего нужно именно таким способом её создавать?
    Это многогранный философский вопрос. Одним из возможных вариантов ответа на который может быть - вы просто по другому не умеете.

    Её куда-то можно передать, как готовую форму?
    Да.

    Как?
    Снова очень широкий вопрос. Можно скопировать из вашей обработки и вставить туда, куда хотите. Можно внести в справочник внешних обработок и она станет частью учетной системы: будет открываться в качестве внешней печатной формы или внешнего обработчика табличных частей документов.
    Ответ написан
    Комментировать
  • Что лучше выбрать?

    Cuoca
    @Cuoca
    Подумайте об образе жизни, который хотите вести.
    SAP - это командировки, если вы хотите развиваться и получать больше 150к. Если вы согласны на меньшее, то обоснуетесь в сервисной компании и будете там вариться. SAP - это переработки. Т.к. всё завязано на бизнес-циклы компаний, вы должны ориентироваться на периоды производственной, бухгалтерской и налоговой отчетности вне зависимости от позиции ( конс или разраб). Например, свалить покататься на лыжах в декабре-январе-феврале-марте может быть проблемой (закрытие года, закрытие 1 квартала параллельно). Просто могут не отпустить или отправить в командировку (если вы работаете на таком модуле).
    Про фронтэнд ничего сказать не могу, но в SAP нет такого потока обновлений, что вам постоянно требуется бесперебойно учиться, чтобы не оказаться за бортом трудового рынка.
    Сейчас все активно переходят или завершают переходы на HANA, так что вы можете удачно въехать на рынок, т.к. всем, кто работал до этого, тоже надо будет доучиваться/переучиваться. Это даёт вам некоторую фору.
    Главный плюс - SAP очень интересный и очень большой. Если вы любите копаться, ковыряться и понимать как тут это вообще всё взаимосвязанное работает, надо брать.
    И еще надо учесть, что если вы хотите идти консом по функциональному направлению, то ваша работа больше про понимание бизнес-процессов и знание и выполнение настроек своего модуля и хорошее ориентирование в смежных. Если бизнес попросит что-то новенькое, то кодить будете не вы, а разраб, ТЗ которому вы поставите.
    Ответ написан
    Комментировать
  • Стоит ли учить Spring если не знаю некоторые темы?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день.
    Все вышеперечисленное вами составляют базис языка Java. Возможно, что на начальном этапе вам не нужна многопоточность, но в любом случае знание основ java будет не лишним.

    но я не знаю такие темы как Аннотации, Коллекции, Обобщения, Многопоточность и т. д.

    Аннотации используются во всех современных библиотеках и фреймворках. Нужно знать хотя бы как они работают. В Spring, Hibernate также используются аннотации.
    Коллекции (JCF) - как по мне обязательный минимум, который нужно знать. В Spring вам придется работать с коллекциями.
    Обобщения (generics) - также достаточно широко используется, в том числе и в Спринг. Например, банальный конвертер (интерфейс Converter<S, T> и т.д.).
    До изучения Spring я бы рекомендовал вам изучить следующее:
    1) основы языка Java (все то, что вы перечислили выше).
    2) Ознакомиться с Java EE (сервлеты), глянуть на jdbc
    3) Изучить SQL (поиграться чуть с БД - MySQL, PostgreSQL и т.д.)
    4) Изучить Hibernate (ORM для работы с БД).
    5) Изучить TCP / IP. Изучить http методы (GET, POST, PUT и т.д.). Возможно, ознакомиться с сокетами.
    и только потом уже с имеющимися знаниями изучить Spring. При изучении Spring уже можно смотреть в сторону АОП и потихоньку изучить Spring AOP и т.д.
    Вот, курс по Spring Framework - https://www.youtube.com/watch?v=5ePo08sqcpk
    Курсов по Spring Boot полно. Есть неплохие на Udemy. Не лишним будет также изучение документации самого фреймворка. Также можете прочитать книгу Spring Boot in Action.

    Стоит ли мне учить Spring и доучивать эти темы вместе или сначала учить эти темы потом перейти к Spring?

    Сперва изучите эти темы, а потом уже Spring.

    https://javastudy.ru/interview/jee-spring-question...
    Ответ написан
    2 комментария
  • Подсистемы, назначение списков?

    @kalapanga
    По-моему, Вы в гугле задаёте совсем не тот вопрос, что Вас интересует. Найденные ответы не имеют отношения к проблеме. Ну вот грубо по пунктам:
    2) Сотрудники "почему-то не отмечена бухгалтерия". А бухгалтерии не интересен каждый сотрудник по отдельности. Она учтёт в расходах предприятия одну общую сумму - зарплата всех сотрудников. А каждым отдельным сотрудником видимо будет заниматься подсистема Зарплата.
    3) Номенклатура "что это вообще". Список услуг, которые оказывает предприятие клиентам, и список материалов, которые требуются для оказания этих самых услуг. "Покраска стен" - услуга. "Банка краски" - материал. Вот это будут элементы справочника Номенклатура. Имеет отношение ко всем подсистемам кроме Зарплаты.
    4) Склады "почему нет галочки бухгалтерии". Склад - это конкретное физическое место, где лежит допустим та самая банка краски. Складов может быть несколько. А бухгалтерии нужно только знать, что у организации есть столько-то краски, на такую-то сумму.

    Всё это деление условное, это видение разработчика. Можете поставить все галки - ничего не сломается. Но зачем человеку, который занимается в организации кадрами и зарплатой информация о клиентах? Как минимум лишняя, а возможно ему и не положено её видеть!
    Ответ написан
    Комментировать
  • Как сделать диапазон цены в 1с?

    @twistfire92
    Python backend developer
    В обработчике ПриИзменении

    Можете завести отдельный регистр, в котором будете хранить допустимые диапазоны цен для каждой позиции. Измерение - ссылка на справочник товаров, ресурсы - минимальная и максимальная цена.
    В обработчике ПриИзменении уже проверять подходит ли новая цена под эти границы.
    Ответ написан
    Комментировать
  • Подойдет ли ms sql express-версия для создания бд где планируется около миллиона записей?

    quality
    @quality
    admin, supp: windows,linux; ubiquiti,mikrotik.
    Добрый день. Установите локально express редакцию, создайте таблицу и поля, внесите 1 запись (+- что планируется вносить) и посмотрите запросом размер строки. И методом простой математики, узнаете ответ на ваш вопрос.
    Ответ написан
    Комментировать
  • Как работает веб-сервер и node js в связке? Зачем нужен Nginx?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Самое простое - nginx отдаёт статику. На больших объёмах делать это через Ноду неэффективно.
    Посложнее - nginx позволяет управлять ходом запроса. Например, редиректить на https.
    Ещё сложнее - можно настроить nginx, чтобы он умно балансировал запросы между несколькими бэкендами и автоматом блокировал слишком частые попытки подключения.

    Nginx очень хорошо в промышленных масштабах делает определённую часть работы, связанной с http-запросом, поэтому ему эту часть работы и делегируют.
    Ответ написан
    Комментировать
  • Стоит ли начинать карьеру в SEO?

    @pcdesign
    Идти в сеошники, все равно как идти в шаманы. Как в шаманизме постучал эдак по бубну и пошел дождь, а эдак снег. Исключительно опытный путь, методы проб, ошибок и экспериментов. Тоже самое и в сео.

    Алгоритмы поисковых систем закрыты, никто не сможет, кроме программиста яндекса или гугла объяснить почему этот сайт находится на 1-ом месте в поисковой выдаче. Все что остается это экспериментировать. При большом кол-ве экспериментов собирается некая статистика, после которой сайты можно научится поднимать наверх в поиске.
    И в этом случае бизнес будет готов отдавать любые деньги.

    Но вы всегда будете как эйнштейновый человек вне ведении истинной картины:
    «В нашем стремлении понять реальность мы отчасти подобны человеку, который хочет понять механизм закрытых часов. Он видит циферблат и движущиеся стрелки, даже слышит тиканье, но он не имеет средств открыть их корпус. Если он остроумен, он может нарисовать себе некую картину механизма, которая отвечала бы всему, что он наблюдает, но он никогда не может быть вполне уверен в том, что его картина единственная, которая могла бы объяснить его наблюдения. Он никогда не будет в состоянии сравнить свою картину с реальным механизмом...»
    «Эволюция физики» А.Эйнштейн, Л.Инфельд.
    Ответ написан
    1 комментарий
  • Как хостить 100+ баз 1С?

    Jump
    @Jump
    Системный администратор со стажем.
    Сервер на windows (есть мысль, что во всём виноват он, так ли это? стоит ли переехать на линукс?)
    Нет. Быстрее на линуксе работать не будет.

    Быстродействие достигается грамотной организацией инфраструктуры и правильным подбором железа.
    В остальном нужно больше информации.
    Средний размер одной базы, сколько всего пользователей активных, сколько пользователей в среднем работает в одной базе в один момент времени, что за базы типовые или нет, если да то какая конфигурация.

    Если предположить что базы файловые то -
    1. Обратить внимание на клиентские компьютеры которые работают с базой - SSD и8гб озу обязателны. Именно на клиентах. Ну и настройка процессора на максимальную производительность.
    2. Сеть, и организация шары. Сеть должна быть нормально настроена и работать четко.
    3. Базы на сервере на SSD желательно, обязательно форматировать диск под базами с размером кластера 8к.
    4. Обратить пристальное внимание на обслуживание БД. Регулярно проводить реиндексацию и сжатие баз. В процессе работы, а особенно при обновлениях базы распухают - а это все приходится тащить по сети.


    В общем при нормальной настройке база должна открываться примерно за 1-2минуты. Быстрее не получится. А этих результатов достичь вполне реально.

    Из явно видных проблем - raid 1 из 2-х дисков.
    Сразу возникает подозрение что на этом массиве установлена система и лежат базы. Так делать нельзя.
    Сделали рэйд под систему - отлично. Но под базы будьте добры выделить отдельный диск или рэйд.
    Ответ написан
    Комментировать
  • Какие версии Delphi сейчас актуальны для разработки desktop-приложения?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Актуальны все версии после 10.х.
    RAD Studio - это среда разработки, которая позволяет писать и на Delphi и на C++
    Delphi - это среда, в которой можно писать только на Delphi.

    Использовать всегда стоит самую последнюю версию. Последняя бесплатная версия (Community Edition) - это 10.3.3.
    Ответ написан
  • WPF Каким образом можно передать данные из СоmboBox одного окна в Label другого окна?

    AVollane
    @AVollane
    Начинающий C# разработчик
    Здравствуйте. Думаю, простым и надёжным способом будет передача нужных данных через конструктор второго окна. Стандартно он создаётся без параметров, но мы можем дописать их туда. Написал код и снабдил его комментариями, думаю так будет проще разобраться.
    Код XAML главного окна (MainWindow):
    <Window x:Class="ComboBoxResultToAnotherWindow.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:ComboBoxResultToAnotherWindow"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <StackPanel>
            <ComboBox Name="cbPat" Margin="100" Height="30"/>
            <Button Name="openSecondWindowButton" Width="100" Height="40" Content="Second Window" Click="OpenSecondWindowButton_Click"/>
        </StackPanel>
    </Window>


    Код XAML второго окна (SecondWindow):
    <Window x:Class="ComboBoxResultToAnotherWindow.SecondWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:ComboBoxResultToAnotherWindow"
            mc:Ignorable="d"
            Title="SecondWindow" Height="450" Width="800">
        <Grid>
            <Label Name="labelWindow2"></Label>
        </Grid>
    </Window>


    Код C# главного окна (MainWindow):
    // Основное окно
        public partial class MainWindow : Window
        {
            // Тестовый список элементов, здесь я взял строки, но вы можете взять другой источник данных
            // и другой тип данных. Можете изменить способ их получение, вобщем как сами посчитаете необходимым
            List<string> elements = new List<string>() { "first", "second", "third" };
    
            // Конструктор основного окна
            public MainWindow()
            {
                InitializeComponent();
    
                // Привязываем элементы к комбобоксу
                cbPat.ItemsSource = elements;
            }
    
            // Обработчик события нажатия на кнопку
            private void OpenSecondWindowButton_Click(object sender, RoutedEventArgs e)
            {
                // Создаём объект, представляющий второе окно с лэйблом, на котором будем отображать данные
                // В конструктор передаём выбранный в комбобоксе элемент (мы изменили конструктор второго окна,
                // соответствующим способом). Данные преобразованы к нужному типу.
                SecondWindow secondWindow = new SecondWindow((string)cbPat.SelectedItem);
    
                // Показываем окно
                secondWindow.Show();
            }
        }


    Код C# второго окна (SecondWindow):
    // Второе окно
        public partial class SecondWindow : Window
        {
            // Конструктор изменён соответсвенно для приём строки, или другого элемента,
            // необходимого вам
            public SecondWindow(string element)
            {
                InitializeComponent();
    
                // Устанавливаем содержимое лейбла элементов, полученным в качестве аргумента
                labelWindow2.Content = element;
            }
        }


    У меня всё получилось. Выбрал в комбобоксе нужный элемент, нажал на кнопку, открылось окно, а там на лейбле выбранный элемент.
    Ответ написан
    2 комментария
  • Какие книги по C++ актуальны на 21 год для обучения с нуля?

    @res2001
    Developer, ex-admin
    Для начала берите любую книгу для начинающих. Лафоре подойдет. Берите издание по свежее. Есть и другие книги подобного рода, конечно.
    Страуструп тяжел и не годится для старта.
    Саттер, Мейерс больше для продвинутых.
    C++ Templates для старта точно не нужен.
    Так же не плохо было бы начать что-то читать по алгоритмам.

    Сейчас проблема с изучением С++ в том, что с 2011 года начали регулярно появляться новые стандарты, в них появляются фишки, которых раньше не было, некоторые из них очень полезные. Толстые учебники не успевают переписываться под актуальные стандарты. Но это не большая беда.
    Базовым сейчас является стандарт С++11 (или С++14 - это дополнение к С++11), его применяют уже многие. Более поздние (17, 20) применяются реже, так что можно не гнаться за тем, чтобы в книге они были освещены. Базовые понятия в С++ в целом мало изменились с древних времен. Но кое-что добавилось.
    Кстати, проблема с поддержкой новых стандартов актуальна не только для книг, но и для компиляторов языка.
    После освоения базы и начала практической деятельности сможете дальше продвигаться в изучении языка, ориентируясь на свои реальные потребности.
    Главное в изучении - больше практики - не зацикливайтесь на книгах. В начале старайтесь делать задания из книг. Когда более-менее освоитесь, переходите к своим задачам/интересам.
    Ответ написан
    1 комментарий
  • Запрет на редактирование строки в Mysql по ID?

    @Miron11
    Пишу sql 20 лет. Срок :)
    снимите привилегии пользователей, которые сейчас созданы в базе данных. Оставьте им право читать. Особое внимание уделите административным учетным записям, например root. В моей практике мне не приходилось защищать конкретно MySQL, поэтому я не знаю, можно ли изменить имя пользователя root, если можно, сделайте это, конечно же изменив его пароль.
    Сделайте специальный логин, которому присвоено разрешение изменять данные. Запомните пароль этого пользователя и сложите его в сейф. Ключ от сейфа повесьте на шею и никому не давайте.
    Сделайте так, чтобы вход с паролем этого пользователя имел отдельный доступ к базе данных. Чтобы его не надо было выводить где - то в конфигурации программы, обеспечивающей работу сайта. Входите в этот счет с паролем через защищенное приложение так, чтобы никто не смог ни увидеть ваш пароль, ни считать его через какие - то устройства, в частности тех, которые слушают что передается по сети. В принципе все современные программы, которые приходят с продуктом защищают пароль логина. Но детали могут быть существенны, прочтите документацию, если есть сомнения. Там как правило описывается хорошо ли защищен сам процесс присоединения к базе данных тем или иным устройством.
    Ну и наконец, защитите таким же подходом машину на которой установлена база данных и сайт.
    В конце - концов, если с первой попытки не получится, и кто - то продолжит "безобразничать", повторите цикл, только теперь уже с некоторым опытом прежней тренировки.
    По мере работы над этой областью рано или поздно Вы столкнетесь с тем, что либо человек, либо какой - то процесс установленный либо на машине, либо в самом приложении сайта, выполняет подмену указателей адресов, либо заметив этот процесс и сличив временные метки записей - их изменений, либо заметив, что кто - то присоединился к базе данных без разрешения с высоко привилегированным пользователем. Обнаружить это можно так же установив триггеры на таблицах, фиксирующие изменения, включая время записи имя учетной записи и значение поля до изменения и после. Проблема в том, что Ваша база в данный момент эксплуатируется не по назначению неким третьим лицом, и это лицо может исказить и эти трассировочные записи, поэтому на начальном этапе необходимо все - таки изолировать пользовательские записи и засекретить вход имеющий привилегии менять данные и административно распоряжаться ресурсами.
    Ответ написан
    4 комментария
  • Как Apache Spark будет параллельно(или не) брать и обрабатывать данные?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Ууу... три года назад вопрос задан.
    Так не интересно :)
    Но попробую ответить, все-равно. Даже зная, что автор наверное поднаторел и возможно может ответить на свой вопрос сам, намного лучше.
    Итак.
    1. Спарк все и всегда делает параллельно. Вопрос лишь в том, дает ему пользователь выполнить параллельный запрос используя 2 или больше, так называемых "executor(s)", по русски наверное "выполнимых".
    Выполнимый это просто java.exe выполнимый. Кроме того, что это выполнимый, это тот ( или те ) выполнимый(ые), которые и выполняют такие операции, как считывание файлов, запись файлов, jdbc, spark sql и другие запросы.
    В зависимости от конфигурации Spark их может быть один или больше.
    Как правило эти executors запускаются на машинах, которые распределены в сети, и физически отделены друг от друга. Есть настройки, которые устанавливают сколько именно executors могут быть запущены на этом массиве машин.
    Машины эти, в свою очередь, называются "worker nodes".
    Кроме worker nodes несущих executors Spark требуется driver. И хотя на этом драйвере так же выполняется java.exe, в свою очередь этот выполнимый не входит в счет executors, за исключением того случая, когда Вы работаете с Spark в режиме локальной консоли "spark-shell". При запуске Spark в режиме локальной консоли все возможности Spark по параллельному распределенному выполнению заданий сводятся к немного больше, чем нулю.
    Да, никто не мешает создать Thread и запустить её параллельно, но это уже не совсем Spark, но собственный код.
    Итак, как же добиться, чтобы Spark выполнил задание параллельно, пользуясь встроенными в Spark возможностями.
    Часть ответа уже прояснилась - надо запустить Spark кластер, по крайней мере с одним worker на котором надо отконфигурировать и запустить 2 или больше Executors. После чего надо выполнить задание, которое Spark умеет выполнить параллельно.
    При этом надо всегда помнить, что Spark попытается оттянуть выполнение задание как можно больше, а вместо выполнения задания, при вызове той или иной функции, запомнить некий план выполнения, который будет выполнен в будущем. Такой план называется DAG ( direct acyclic graph ).
    Хорошим примером операции, которую Spark выполняет одновременно несколькими потоками, это считывание файлов из директории
    spark.read.format("json").load("my_path_to_json_files/files_subdirectory/*.json")
    хотя и не прочитает файлы, как таковые, но создаст DAG, при этом воспользовавшись thread равным по количеству executors. То есть уже некоторые аспекты параллельного выполнения появляется.
    Далее, если Вы выполните следующую линию, запомнив этот DAG в неизвестном
    val df = spark.read.format("json").load("my_path_to_json_files/files_subdirectory/*.json")
    а следующим шагом, допустим, запишете этот же список файлов в формате parquet в другой файловой системе, например

    val df = spark.read.format("json").load("my_path_to_json_files/files_subdirectory/*.json")
    df.write.format("parquet").save("my_path_to_parquet_files/files_subdirectory")

    Spark воспримет эти две линии как команду создать, так называемую job, в рамках этой job Spark задаст executors их собственные Tasks в рамках этой самой job, и по мере выполнения Task на executors будет продвигаться к тому, чтобы выполнить всю Job, при этом заметьте
    задание будет выполнено параллельно
    и
    независимо друг от друга, теми самыми Тhreads.
    Стоит заметить, что если Job задает driver, то распределением Tasks, и отслеживанием стадий их выполнения ( Stages ) уже занимается Spark Scheduler.
    Так выглядит архитектура Spark при выполнении некоего задания.
    Есть ещё несколько способов обратиться к подсистеме executors с целью параллельного и одновременного выполнения задания, это
    df.edd.foreachPartitionAsync()
    но в этом случае Вам придется написать код, который уже будет выполняться настолько параллельно, насколько умело Вы владеете языком описания заданий для Spark, scala и где то java.
    Кроме параллельного выполнения заданий Spark поддерживает, через свой язык, scala, те же Threads и параллельные коллекции, которые так же способны поддерживать параллельное выполнение потоков. Но, по большей части, эти потоки будут выполняться на driver, то есть сами по себе они не будут выполняться распределено. А это уже сильно уменьшает возможности Spark использовать параллельное выполнение заданий, поскольку ресурсы одного отдельно взятого driver конечны, и при параллельном выполнении заданий driver довольно быстро их, эти ресурсы, исчерпает, если Вы попытаетесь считывать, допустим, файлы большого размера, или выполнять задания на данных большого размера.
    Я попытался найти в документации описание распределенного параллельного выполнения запросов, но как - то быстро у меня найти не получилось.
    Не поленитесь, и поищите Spark документацию. Там все эти детали досконально описаны.
    Ответ написан
    Комментировать
  • В каких случаях стоит предпочесть MS SQL Server другим БД?

    @Miron11
    Пишу sql 20 лет. Срок :)
    MySQL имеет значительно более слабая поддержка выполнения запросов
    Вплоть до 5.7 не имел процедур.
    Хотя структуры языка позволяющие создать процедуры у MySQL после этого появились, как такового языка программирования, выполнения логических операций, у MySQL не существовало. Возможно это изменилось. Но скорее нет.
    Таким образом называть MySQL полноценной СУБД нельзя.
    Если кого - то возможно не смущает создание кластеризованных индексов "по умолчанию", то для меня отсутствие подобных рычагов управления верстки цифровых записей неприемлемы.
    ----
    PosgreSQL база совершенно иного уровня, в плане академических требований, но вплоть до 9-й версии страдала от файл-объектной структуры записи, то есть каждая таблица или индекс это свой файл. Неизбежным результатом оказались провалы в аккуратности учета данных, когда от базы потребовались решения сверхзадач. Передача файловой системе ОС ответственности за аккуратность учета операций записи привели к потере самой базой доверия пользователя ( Uber ).
    Ситуация была выправлена в авральном порядке, и теперь у PostgreSQL все в полном порядке. Костяк команды разработчиков сумел быстро поправить ситуацию через несгибаемую волю и удивительный профессионализм ( как нам всем сейчас этого в России не хватает после того, как это было в избытке в советское время ).
    Поэтому с PostgreSQL на сегодня вопрос конечно не простой. Но и здесь, конечно, базе, которую поддерживают исключительными личными жертвами группа волевых и компетентных соратников, трудно тягаться с коллективом у которого есть цель, план развития, и видение изнутри всего многообразия цифровой индустрии.
    Ни у одной базы никогда не будет возможности похвастаться полноценной и постоянно улучшающейся поддержки очередей, встроенных каталогов интеграции данных, отдельная но хорошо отлаженная для совместной работы на сервере службы OLAP, и полноценного ядра обработки данных непосредственно в памяти резидента выполнимого ( Hecaton ). Плюс разнообразные форматы хранения данных, безупречная поддержка языков и кодирования символов, c SQL Server трудно состязаться. А возможность запросто вскрыть протокол общения и просмотреть запросы выполненные базой через profiler делают работу как разработчика, так и службы поддержки простой и легко поддающейся уму человека, у которого есть семья, дети, родители, и что - то в жизни, кроме работы.
    ----
    Я писал этот пост и уже тогда подумал, что MySQL и PostgreSQL не полный выбор из возможного списка конкурентов SQL Server на место СУБД. Меня, в свое время, заинтересовал Линтер. Раньше эта СУБД считалась русской, но в 2015-м - 17-м проскользнули данные о выкупе продукта зарубежными гражданами. Оставив темную историю с правами на продукт в стороне, по моим оценкам у базы есть все необходимые качества для обслуживания цифрового предприятия.
    Возможно там есть ограничения по количеству потоков, объему хранимых данных. Это наверное надо проверить с поставщиком.
    Поиск и оценку русских продуктов СУБД я веду непрерывно, и буду благодарен за любые подсказки и указатели.
    Ответ написан
    1 комментарий