Задать вопрос
  • Как сделать запрос на поиск 6 значений в одной таблице и 1 значения в другой, имеется не оптимизированный запрос с ILIKE?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно зачем ты конструируешь ILIKE когда у тебя идет поиск цифр и нет
    case-insensitive алгоритмов. Упрости, чтоб было системе проще.

    Про триграммы тут уже напихали. Нечего добавить.

    Есть идея попробовать следующее. Можно конкатенировать все искомые поля в одно большое
    виртуальное поле и построить по нему реальный триграммный индекс. Здесь мы сэкономим на количестве.
    Вместо 5 индексов сделаем один и результат будет тот-же самый. Нам по сути безразлично
    в каком поле найдена строка. Важно что просто была дизьюнкция предикатов.

    CREATE TABLE messages(
        .......
        all_fields text GENERATED ALWAYS AS (CONCAT(sender,' ',message,' ',receiver,' ',sim))
    );
    
    CREATE EXTENSION IF NOT EXISTS pg_trgm;
    
    CREATE INDEX messages_tr_idx ON messages USING GIN (all_fields gin_trgm_ops);


    Точно так-же поступить с табличкой user_apps.

    По поводу этого ограничителя.

    ....
    order by "messageId" desc 
    limit 51 offset 0

    Судя по всему - это дизайн запроса для показа на UI. Обычно так делают чтобы
    показать на формочке веба или в приложении.

    Limit и order - это плохая комбинация. Если смысл сортировки по messageId - это показать
    последние (оперативные) сообщения то я-бы заменил это на поиск по партишену сегодняшнего
    дня
    (или опер-дня) если можно так сказать.

    Разделение данных на оперативные и исторические ускорит поиск многократно. И если
    допустии опер-день занимает 500 тыс строк а исторические данные - 13 млн. То вы
    сразу получаете вместо 80 секунд ускорение ... эээ в сколько раз? 500 000/13 000 000 = x/80
    это будет примерно 3 секунды. Вот. Это если предполагать линейную зависимость от объема.
    Ответ написан
    Комментировать
  • Нынешние реалии стандарта Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Каковы нынешние реалии стандарта языка? Используются ли в каких-то моментах фишки новых версий (если это вообще возможно)? Ибо судя по всем статьям, практически большинство до сих пор сидит на восьмёрке.

    Да. Это отчасти правда. Основные заказчики Java разработки - это банки. А они не любят миграции версий
    без какой-то особой причины. Я работал с тремя банками и я могу сказать что большая часть кода - это
    легаси. И совершенно нет никакой надежды что будет bump версии языка. Product owner-ы в таком случае
    задают вопрос - "а что мы с этого будем иметь". И обычно для банка - ничего особенного. В некоторых
    случаях (использование CORBA или JAXb, com.sun.*) повышение версии чревато проблемами. Что-то
    может резко отвалиться в новой версии.

    Самые интересные новшества после JDK8 с моей точки зрения были не в языке а в других слоях JRE/JDK (GC, FFI, vectorization, unmanaged memory). Но вы еще попробуйте эти новшества продать бизнесу. Успехов вобщем.
    На какой версии лучше всего практиковаться в написании кода, да и обучаться в целом?

    Да. Ты можешь брать самую последнюю LTS-версию. Брать preview нет никакого смысла. Очень
    сомнительно что для учебы тебе кто-то даст в туториалах экспериментальные фичи. Скорее наоборот.

    Есть ли вообще предпосылки на переход большей части энтерпрайза в ближайшем будущем (ближе к 2030) на более современную версию? Почему тезис о дорогом переходе не нивелируется тем, что за 10 лет со времён восьмёрки завезли достаточно "контента", например, новый синт.сахар и обновленный GC?

    Никакого глобального перехода на самом деле нет. Потому что нет такой проблемы.
    По сути проблемой например для Java 21 может стать "end of extended support" а он условно отмечен
    например на 2031 год. Вы еще попробуйте доживите до этого года и попробуйте сидеть на одном проекте
    столько лет.

    Java может стать COBOL-ом XXI столетия. Но у нее будет даже меньше проблем чем у Кобола, потому что
    байткод и стек-машина имеет больший потенциал. Тоесть пока жива концепция байт-кода и пока существуют
    процессоры Фон-Нейман архитектуры, можно сказать что Java неубиваема.

    Вообще не стоит вам сильно циклиться только на языке. Параллельно существуют Scala, Kotlin, Groovy, Clojure
    и их само существование делает много альтернатив. Одна JVM - бесконечное число языков.
    Ответ написан
    3 комментария
  • Через какую программу перевести текст цветной с таблицами в электронный вид (Книга Английского Соловов В.Н)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    То что в таблицах - не надо переводить. Перевод будет безсмысленным т.к. речь идет о
    тех формах английского, которые без контекста не существуют или не существуют в других
    языках. Это shall/will, will have to.

    Просто выучи как есть.
    Ответ написан
    Комментировать
  • Увидит ли сисадмин, чем я занимаюсь, если подключиться через Anydesk?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Корпоративный ПК полностью принадлежит корпорации. И все что вы там делаете - фотографируется,
    кей-логгируется и снифферится. И потом хранится в BigData.

    Я советую вам не играть в кошки-мышки с безопасником. Вы все равно проиграете.

    Используйте личный ноутбук для личных дел. И лучше выходить в коридор корпорации или на улицу
    чтобы не было к вам лишних вопросов.
    Ответ написан
    Комментировать
  • Как перехватить исключение pyo3_runtime.PanicException при использовании pandas и calamine?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если сторонняя библиотека крашит python процесс то вам просто надо запускать
    еще один процесс-камикадзе (excel-kamikadze.py), который даже если падает - не оказывает влияние на основной.
    Эта техника используется часто в акторах Erlang/OTP.

    Как получить данные назад из excel-kamikadze.py. Тут - много вариантов. Можно создавать временный
    файл (XML/JSON куда передавать нужные результаты парсинга). Можно выдать их в поток STDOUT.

    import subprocess
    
    result = subprocess.run(["/usr/bin/python3", "kamikadze.py"], stdout=subprocess.PIPE) 
    output = result.stdout.decode("utf-8")
    Ответ написан
    Комментировать
  • Регулярное выражения для поиска информации?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В Apache Spark обычно нет таблиц. Дата-инженер оперирует абстракциями
    - RDD
    - DataFrame
    - DataSet (почти тоже самое что датафрейм)


    Когда у тебя в одной руке датафрейм - ты можешь уже к нему применить фильтр с регуляркой тип

    df.filter(col("name").rlike("(?i)^*rose$")).show()

    Если сильно хочется - то поверх датафрейма создается View через

    df.createOrReplace......View("view_name")

    И с ним работают.

    spark.sql("SELECT .... WHERE col RLIKE ..... ").show()


    Но это уже такой себе овер-инжинеринг. И если можно решить задачу на уровне датафреймов
    то обычно так и решают. SQL и прочее подключают когда есть JOINS или какие-то особые условия
    (catalyst optimizer нужен).
    Ответ написан
  • Возможно ли создать универсальное решение для процесса синхронизации данных от разных поставщиков?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если кратко - то да. Можно.

    Если более подробно - то это долго. Мучительно. И где то в конце вы создадите свой собственный
    язык (DSL)
    который будет описывать все бизнес-преобразования данных.

    Общая идея такая. Вы пишете одинаковый софт на Python для всех поставщиков данных а различия
    реализуете как часть конфигураций. Пример (совершенно выдуманный):

    datasources:
      - datasource: Bitcoin
        format: xls
        header: on
      - datasource: Market
        format: csv
        header: off
    
    transformations:
      - name : Bitcoin
        filter: "WHERE payload is not null"
    
    sink:
      - name : Bitcoin
        dest: jdbc:thin:oracle@....

    Существует разумный баланс между DSL и частным решением для каждого провайдера
    данных. Например с точки зрения передачи знаний для новых разработчиков решение
    на DSL всегда плохое. По личному опыту коллегам всегда не нравится то, что вам кажется
    красивым и концептуальным. И чаще всего DSL языки тихо умирают с уходом с проекта
    главного создателя и идеолога этих всех DSL.

    В качестве основы для DSL не обязательно нужен Yaml. Это можно делать на Python, Lua, Lisp
    и вообще даже на основном языке. Главное чтобы конфигурационная часть была декларативной
    и не содержала циклов и проверок условий.
    Ответ написан
    1 комментарий
  • Как сделать нечёткую кластеризацию текстов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе нужно во первых поставить задачу в терминологии векторов (VectorDb, spark.mlib, pandas).
    По сути надо сделать top 3 максимально близких жанровых вектора к текстовому описанию игры.
    SELECT 
     distance(v_genre, v_game) as dist, genre, game 
    FROM
     genres, games
    .....
     (select top 3 by dist for each game)
    Ответ написан
    Комментировать
  • Хостинг не до конца выполнил услуги, файлы потеряны, кто виноват?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю что нет смысла ходить в суды. Суд будет смотреть в то что написано в договоре. А там про
    бэкапы скорее всего будет написано в общих словах. И если ты в течение месяца ни разу не сделал
    backup то ты - плохой поросёнок. На будущее - всегда делай backup. Делай backup когда дела идут хорошо.
    И у тебя не будет ситуации когда надо срочно-срочно.
    Ответ написан
    6 комментариев
  • Как создать хранилище с raid 1?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Raid в домашних условиях никому не нужен. Просто не летает эта тема.
    Купи обычный USB 3.0 portable drive в резиновом корпусе. А лучше два. И пиши бэкапы
    туда в шахматном порядке.
    Ответ написан
  • Как составить список уникальных комплексных решений для уравнения? Как понять что число 0.999999 то же что 1.0000001?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно методом Монте-Карло перебирать все случайные решения на всей области определения.
    Потом - делать квантизацию (так чтобы такое значение 0.99999 равнялось такому 1.000001)
    и квантизованные пары (ключи) складывать в какую-то хеш-табличку с подсчетом.
    Триллион итераций ждать не будем. Может быть где-то через тысяч сто у нас будет
    гистограмма. И бери из нее top 10 значений. Это и будут твои 10 уникальных.
    Ответ написан
    1 комментарий
  • Как "склеить" два файла?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Самый простой вариант - редактирование сегмента данных не трогая код. Забиваешь
    нулями дополнительный резерв места в строке.

    section .data
        error_message db "Hello byte, hello word", 0, 0,0,0,0,0,0,0,0,0,0,0,0


    Потом в hex редакторе просто передвигаешь слово вправо не забывая что ASCIIZ строка обязательно
    должна закончистя нулем.
    Ответ написан
  • Имеет ли смысл добавлять первичный ключ в таблицу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть два важных смысла в ПК. Первое - это реляционная алгебра. Про это написанно миллиард
    книжек и все преподаватели тебя зачморят если в таблице нет ПК и foreign key constraint не будет
    работать.

    Второе. Если ты создаешь например CREATE TABLE .... (.... PRIMARY KEY..); то бесплатно
    бонусом получаешь создание индекса
    по полям где есть ПК и соответсвтенно поиск по ПК
    будет идти очень быстро и не будет дубликатов.

    Но в современном мире понятие "данные" стало очень широким и в базах очень часто лежат
    таблицы без ПК. Это staging table (куда идет загрузка из внешних источников), логи и отчеты.
    И аналитические представления. В области bigdata данные часто лежат в файлах (parquet, orc, delta)
    и там вообще ПК нету. И ничего. Работает.
    Ответ написан
    Комментировать
  • Функция проходит по циклу, но не суммирует значения почему?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Во первых этот огрызок кода не компилируется. Ты уж постарайся публиковать самодостаточный код.
    Чтоб читатели могли собрать его и проверить самые базовые ошибки.

    Во вторых сумма

    res[i] = res[i] + #IN_STM_SUMM[j].doubleValue();

    будет зависить от нескольких проверок условий которые выше по коду не срабатывают. Разберись
    почему эти проверки не сработали и будет тебе ответ.
    Ответ написан
    Комментировать
  • Каждые 10 сек. сайт должен получать цены с 11 бирж, но этих бирж станет больше, как распределять нагрузку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мысли.

    1) У тебя есть требование периода 10 секунд. Но нет требования синфазности. Тоесть можешь
    получать цены со сдвигом примерно в 10/11 секунды.

    00:00:00.00 - Market 01
    00:00:00.90 - Market 02
    00:00:01.80 - Market 03


    2) Вряд-ли все биржи будут поддерживать одинаковый сетевой протокол и одинаковый план обновления.
    Рассмотри вариант MQ если таковой будет. Подпишись на события.
    Ответ написан
    Комментировать
  • Как можно максимально уменьшить размер данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Несколько мыслей.
    - sqlite - это не база для BigData.
    - в клипе не будет смысла. А для сравнения картинок - поищи что такое perceptual hash. Статья была гдето.
    Ответ написан
  • Почему компьютеры не используют двоично-десятичный формат для вычислений?

    mayton2019
    @mayton2019
    Bigdata Engineer
    BCD использовалась для старых ЭВМ (16 бит) в тех случаях когда нужно было делать
    финансовые расчеты.

    Могу предположить, что для финансовой арифметики, возможности современных
    CPU в части SSE/AVX перекрыли все подобные задачи. И работают они быстрее чем BCD.

    В целом, эта (BCD) арифметика сегодня живет в бухгалтерских калькуляторах типа Sharp/Citizen.

    Погрешности при делении AVX512 и BCD можно обсудить отдельно, но это нужно иметь какие-то
    требования. Чтоб не просто так с потолка сравнивать.
    Ответ написан
    Комментировать
  • Как написать прикладной протокол?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе на самом деле нет смысла строить протокол поверх TCP.
    Не будет никакого сильного преимущества. HTTP достаточно
    удобен
    чтобы гонять запрос-ответ.

    И тогда можешь описать свой протокол как надмножество REST/SOAP/GraphQL и прочее.
    Ответ написан
  • Как переорганизовать базу данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне нужно её перестроить. Думаю объединить таблицы с одинаковыми параметрами
    в одну таблицу, добавив флаг для их различия. Но что можно было бы сделать ещё?

    Так не делается. Никто не создает технические задания с основанием "что-бы сделать еще".

    Оставь таблицы как есть. Но если у тебя есть дата и время как тип данных то замени text на date/time.
    Это будет честно по отношению к семантике хранимой информации.
    Ответ написан
    Комментировать
  • Можно ли использовать кириллицу в Active Directory?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Кириллица или прочая кодировка - это не проблема Active Directory скорее всего.
    Но это может быть проблемой для того программного обеспечения которое
    использует AD как LDAP сервис, получая из него свои сведенья.

    Надо тестировать весь софт который в организации взаимодействует с AD.
    Ответ написан
    Комментировать