• Как указать в Startup путь станартный Web api?

    @Miron11
    Пишу sql 20 лет. Срок :)
    По идее в Web API не существует реализации. Вы сами создаете и физический и логический слой службы. А Web API дает Вам только набор ( весьма запутанных ) стандартных сочленений различных устройств.
    Поэтому так или иначе Вам необходимо будет выбрать платформу, на которую ляжет обертка Web API, а сверху реализация продукта.
    Отказавшись от физической реализации, и взяв на себя полностью ответственность за её создание Вы выигрываете в простоте платформы ( это не ирония и не ехидство, это действительно так ). Поскольку, несмотря на количество очень тесно состыкованных сочленений и оберток Wrb API, правила их состыковки единообразны, лекала легко поддаются интуитивному запоминанию, а материализация не такое уж и сложное дело.
    MVC, с другой стороны, это уже реализация, и здесь и маршрутизация и каждое отступление от предписанных реализацией шагов, это практически безнадежное предприятие.
    По этой причине в UI пользуются MVC. Здесь меньше внимание, насколько оптимально машина верстает страничку, а вот возможность расцветить текст образами и эффектами, чтобы захватить воображение пользователя, есть все инструменты.
    Web API это платформа, когда каждый винтик машины необходимо подчинить передаче данных. Это позволяет на связке из нескольких сравнительно дешевых двух - процессорных машин строить предприятия по сборке самолетов, экономя на компьютерах миллионы долларов.
    Ответ написан
  • Как 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 документацию. Там все эти детали досконально описаны.
    Ответ написан
  • Существует возможность подключения к Microsoft Analysis Services кроме коннектора?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Есть
    https://docs.microsoft.com/en-us/analysis-services...
    XMLA, XML for Analysis протокол.
    Есть плагины для разных серверов, например IIS Microsoft, которые транслируют запросы написанные на XMLA диалекте в родные запросы аналитической службы, и отвечают таблицами данных. При чем они работают не только с Microsoft Analysis Services, но всеми службами, которые соответствуют интерфейсу, в частности есть транслятор для Kettle Pentaho, который во всяком случае раньше, работал поверх Tomcat. В прошлом году их обещали перевести на рельсы Хитачи центра разработки ПО, но я так и не удосужился познакомиться, если платформа была выпущена одним из домов Мацушита Корпорэйшн в поле открытых источников, или хотя бы как открытая платформа, её, лицензия для "коммуналки".
    Ответ написан
  • В каких случаях стоит предпочесть 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-м проскользнули данные о выкупе продукта зарубежными гражданами. Оставив темную историю с правами на продукт в стороне, по моим оценкам у базы есть все необходимые качества для обслуживания цифрового предприятия.
    Возможно там есть ограничения по количеству потоков, объему хранимых данных. Это наверное надо проверить с поставщиком.
    Поиск и оценку русских продуктов СУБД я веду непрерывно, и буду благодарен за любые подсказки и указатели.
    Ответ написан
  • Как в Вывести обединение таблиц по условию ??

    @Miron11
    Пишу sql 20 лет. Срок :)
    Книга без автора?
    Код книги в списке авторов?
    Если первое ещё возможно, если запись утеряна, то второе, это скорее пережиток ручной учетной записи, которую не стоит мучать в СУБД.
    Может не так элегантно, но понятнее сделать UNION
    1. select ..., min(author_id) from books inner join authors on books.author_id = authors.author_id
    group by ...
    2. select ..., 'empty' as author_id from books where not exists ( select 1 from authors where author_id = books.author_id)
    и представить их
    1 union 2
    -- CTE прекрасно работают с union, их надо вынести в предъём выражения.
    -- Если у авторов есть взаимоотношения родитель - ребенок, то эти взаимоотношения и отслеживаются в CTE, там же задается указатель уровня, по которому можно выбрать старшую запись в выборке ( where parent_level = 1 )
    Ответ написан
  • Какой компилятор для языка Си посоветуете?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Я, по доброте душевной, думал Вам Windows SDK с MSBuild посоветовать. И тут прочел MSDN статью по WSL и почувствовал себя безнадежно отставшим от жизни :)))))))))))))))))
    https://code.visualstudio.com/docs/cpp/config-wsl
    Но потом посмотрел здесь https://docs.microsoft.com/en-us/cpp/build/buildin...
    и немного успокоился
    https://docs.microsoft.com/en-us/cpp/build/buildin...
    Вспомнил, что есть Visual Studio Community Edition, есть, хорошо законспирированный, но неубиваемый, Борлановский компайлер, который после 10 часов поиска раз в 10 лет спасает корабль, и все встало на место.
    Vulkan... запретный плод сладок.
    Ответ написан
  • Почему не записывает значение в БД?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Может дело в символе & между Sapdragon&Time = 10.02.2002?

    Для проверки работы SQL кода не пробовали без PHP в редакторе SQL запроса
    INSERT INTO `u707651_forum`.`configs` (`CName`, `Username`, `Time`) VALUES ("Rage", "Sapdragon", "10.02.2002")
    Ответ написан
  • Как прочитать и распаковать Rar/Zip файл?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Дефолт должна работать. Отсутствие "header" почти наверняка означает, что файл был обработан не утилитой, но кодом. Утилиты обязательно создают header запись.
    Возможно надо покопаться в документации дефолт библиотеки, как обработать stream, а не архив. Во всяком случае для zip файлов. Rar, возможно, имеет другие требования.
    Ответ написан
  • Как правильно составить запрос mySQL с выборкой данных из другой таблицы?

    @Miron11
    Пишу sql 20 лет. Срок :)
    select logs.id
    , logs.serial
    , logs.action
    , logs.ip
    , logs.date
    from owners owners
    inner join clients clients on clients.token = owners.token
    inner join logs logs on logs.serial = clients.serial
    where owners.token = 'abcd...'
    Ответ написан
  • Как сделать AUTO_INCREMENT в postgresql?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Мне больше нравятся секвенции. Около часа назад, когда нашел вопрос оказалось, что мой pgAdmin 4 серьёзно поотстал. Поставил новый, уже 64-х битовый, подсоединился к настольной службе, и только через GUI построил следующие объекты, никуда не торопясь. Все удивительно приятно и удобно. Надеюсь пригодится :)

    CREATE SEQUENCE public.testincrement_sequence
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    CACHE 1;

    CREATE TABLE public.testincrement
    (
    i integer NOT NULL DEFAULT nextval('testincrement_sequence'::regclass),
    a character varying(250) COLLATE pg_catalog."default",
    dt timestamp without time zone,
    un character varying(128) COLLATE pg_catalog."default"
    )
    WITH (
    OIDS = FALSE
    )
    TABLESPACE pg_default;
    Ответ написан
  • VisualVM или IDEA?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Видимо коллекции рассредоточены в потоках ( threads ) которые что - то удерживает в памяти.
    Если Вы пользуетесь потоками ( thread ) непосредственно, то наверное надо вызывать "return" в методе run, чтобы они сигналили процесс, что их можно безопасно чистить, если же они в некоем контейнере, которым управляет некий объект по умолчанию ( pool ), то здесь все зависит от контейнера, есть хорошие, но бывают всякие :)
    Ответ написан
  • Как правильно составить SQL запрос?

    @Miron11
    Пишу sql 20 лет. Срок :)
    select count(*) from (select game, game_id from bets group by game, game_id) as dt
    Ответ написан
  • Как скопировать представление?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Иногда view создают в какое - то время, а потом база меняется.
    И так view может и есть, но не работает.
    Их можно игнорировать.
    Если базы на самом деле одинаковые, это одно из таких устаревших view, которое не построится и на той базе, из которой Вы его оригинально взяли.
    Возможно есть другие причины... поделитесь копией ошибки и, если имеет смысл, строкой, которая её вызывает.
    Ответ написан
  • Как создается серверная часть программно-аппаратного устройства?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Каждое устройство имеет своего поставщика.
    В проэктах, в которых я принимал участие, вендор предоставлял некоторый пакет ПО, который дает доступ к набору функций, с помощью которых с устройством можно общаться. Как правило описывается дополнительный, инженерный вход, для отладки ПО, доступ к которому либо с помощью специального разъема, либо через хорошо известный стандарт ( например I2C )
    На каких языках поставщик предоставляет вход в устройство как правило описано в технической документации. Обычно устройства защищающие допуск к машине имеют выход через библиотеки на С++, это связано с требованиями по интеграции с устройствами ввода вывода, которые традиционно пишутся для этого языка.
    3 месяца это приемлемый срок для проэкта, где все на местах, включая команду профессионалов, и надо внедрить новый компонент.
    Если надо писать защищенное хранилище для паролей, если надо писать ярус интеграции с ярусом защищенных цифровых продуктов шифрующих и защищающих содержание, если есть ( высокая ) вероятность изменений других компонентов машины, с которыми в свою очередь этому сенсору надо как - то вместе работать, то одни внешние зависимости займут хорошие 2 месяца на усушку - утруску, то есть брать на себя ответственность сделать все за 1 месяц в такой ситуации не рекомендую.
    Если же задача просто наладить обмен информацией с новым устройством, то тогда все иначе. На нашем проэкте смена встроенного шифровального устройства на внешнее сетевое заняла 2 недели от запроса до выхода продукта на линию и безупречной работы.
    Многое зависит от того, что именно необходимо сделать.
    Ответ написан
  • Запрет на редактирование строки в Mysql по ID?

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

    @Miron11
    Пишу sql 20 лет. Срок :)
    Не пробовали поискать в яндексе?
    Я ввел запрос "MySQL for json" выражение "for json" поддерживается в SQL Server и это считается золотой стандарт СУБД, поэтому похожие функции в других СУБД можно искать по ключевым словам.
    Вот ответ, по - моему подходит.
    https://stackoverflow.com/questions/41758870/how-t...
    Ответ написан
  • Какая из баз данных лучше всего подходит для хранения большого словаря?

    @Miron11
    Пишу sql 20 лет. Срок :)
    А Вы не пробовали добавить индекс на поле из 4-х байтов?
    На MySQL индексы работают вполне приемлемо, главное, чтобы это был первый индекс созданный на таблице, тогда InnoDB ( default ) движок по умолчанию создаст кластеризованный индекс.
    Вот синтаксис: https://dev.mysql.com/doc/refman/8.0/en/create-ind...
    обратите внимание на варианты UNIQUE, это поможет подтвердить, что ключ каждого текстового поля действительно уникальный.
    Потом, во время запроса, надо будет аккуратно проверить синтаксис, чтобы подтвердить что запрос создан так, что индекс будет использован - тип данных в WHERE должен соответствовать, и что запрос действительно его использует ( по моему в MySQL это опция EXPLAIN ).
    Если все сделано верно, то скорость выполнения запроса с миллиардом записей должна быть вполне приемлема.
    Осталось проверить некоторые детали. Из вопроса не очень понятно, если база многопользовательская, или обслуживает пользователя работающего на этой же машине, есть ли одновременный доступ нескольких пользователей, иными словами доп информация по масштабу использования базы может помочь. И хотя SQLite намекает на чисто локальный характер записей, это детали которые лучше подтвердить, чем оставить за кадром.
    Кроме того, какой характер ключа из 4 байтов, это число или бинарная конструкция, если бинарная, приемлемо ли его перевести к типу Integer, это существенно для скорости индекса.
    ---
    Если же индекс уже создан, и не показывает результаты, которые Вы ожидаете, детали запрошенные выше помогут разобраться.
    Ответ написан
  • Как вывести все индексы массива, соответствующие условию?

    @Miron11
    Пишу sql 20 лет. Срок :)
    public class StatsService {
    
        public ArrayList<Integer> monthsOfTopSales(long[] sales) {
    
            long topSale = sales[0];
            Integer month = 0;
            ArrayList<Integer> topMonths = new ArrayList<Integer>();
    
            for (long sale : sales) {
                month ++;
                if (topSale < sale) {
                    topSale = sale;
                    topMonths.clear();
                    topMonths.add(month);
                } else if ( topSale == sale ) {
                    topMonths.add(month);                
                }
            }
            return topMonths;
        }
    
    }
    Ответ написан
  • Можно ли считать справочником табл. с вн. связью?

    @Miron11
    Пишу sql 20 лет. Срок :)
    В принципе справочник, это сущность. В СУБД каждая линейка, это сущность. То есть паритет по свойствам между объектами - сущностями и записями в СУБД будет
    Сущность/объект - запись в СУБД.
    В противном случае, представьте, у Вас таблица
    "Справочник"
    У Вас есть программа, в программе есть клиент СУБД и пользуясь этим клиентом Вы заносите в СУБД таблицу "Справочник" справочник с полями
    № - от 1 до макс 32 битовое число
    Значение - допустим слово русского языка
    ----
    Проходит 10 минут и разработчику так нравится то, что получилось, что он решает точно так же распорядиться другим справочником, теперь это имена городов с номером.
    ----
    И как Вы теперь эти справочники сможете идентифицировать, которая запись принадлежит которому справочнику? Это уже сделать не получится.
    Возможно пример немного притянут за уши, но мне кажется суть описана хорошо.
    Ответ написан
  • Как лучше синхронизировать 20 бд?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Архитектура синхронизации данных на самом деле содержится в структурах данных передовых создателей СУБД. Прекрасный пример для подражания - SQL Server.
    У него, начиная с версии 2008 или 2012 есть опция обратной проверки странички файла хранящих данные - сумма кратно усеченных значений из 8 полей. Если функция и значение разнятся, страничка объявляется испорченной, после чего включается механизм подгружающий копию той же странички с машины, где эта страничка "здоровая".
    Как разбить данные в таблице на блоки / странички, какая функция лучше для подсчета и как осуществить коммуникации между базами это наверное параметры, которые Вы можете подсказать. Если Вас заинтересовал этот подход, пожалуйста напишите, чтобы сделать полноценное решение.
    Ответ написан