Как стать автором
Обновить
6
Карма
0
Рейтинг

Программист

Что означает I в ACID и как это можно использовать

Оно действительно так, если у вас долгие транзакции и вы пытаетесь проводить какие-то сложные операции.
Если транзакция заканчивается сразу после этих изменений, то другие транзакции это увидят и будут выполнять свои запросы соответствующим образом. Не бывает так, что запрос начал выполняться с одними данными, а закончил с другими, тогда пример с вставкой и удалением не работал бы, а должен. Атомарность где?

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

Что означает I в ACID и как это можно использовать

Речь в статье не просто про лок, а про контроль целостности.

В статье уже написано, что для задач, которые выполняются быстрее, чем 0.5 мс такой лок не имеет особо смысла, если только не является важным контроль факта выполнения задачи.

Использовать редис или любой другой инструмент только потому, что хочется - не является инженерныv подходом, а любительством. Вам действительно нужен инструмент, который при падении теряет все ваши данные? Редис же в памяти работает. А ваша БД - она даже если упадет, целостность гарантирует.

Что означает I в ACID и как это можно использовать

Что означает I в ACID и как это можно использовать

Насколько мне известно, в MySQL есть 2 движка - myisam, innodb, какой именно вы использовали? Первый даже не поддерживает внешние ключи и по сути своей не подходит для серьезной работы. Иннодб получше и скорее всего там такой проблемы быть не должно.

Что означает I в ACID и как это можно использовать

Не совсем, уровни изоляции про другое. Смотри. У тебя есть задача по резервированию товаров заказа, причем работать приходится с разными магазинами, т.к. ты интегратор. Ты можешь сделать так, что бы каждый товар резервировался по отдельности.
Что получаешь в этом случае? Допустим, что резервирование чего-то не удалось. Тогда ты сможешь спокойно отследить что именно нужно отменить, на каком этапе процесс резервирования заказа остановился. Или наоборот, предложить пользователю изменить заказ, например отправив письмо или как-то еще уведомив, что данный товар не удалось для него найти.
Даже если в процессе резервирования что-то упадет, то ты о том факте, что уже пытался - будешь знать. Ведь можно в процессе сброса задачи установить флаг "пытался, но что-то не получилось".
Тут не просто блокировки, а полный контроль процесса.

Что означает I в ACID и как это можно использовать

поправил, так лучше?

Миллиард абитуриентов МИРЭА

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

Миллиард абитуриентов МИРЭА

250 очков гриффиндору!

Хороший инженер знает свои инструменты

Например используя рефлексию в Java можно вызвать метод класса А, передав ей инстанс класса Б, наследующего от А.
Опять же, в JS жесткие правила. Никакой магии нет. Ты либо знаешь как работают эти правила, либо для тебя это все какая-то авада кедавра. Не надо списывать собственную лень на неинтуитивность. Программирование и не должно быть интуитивным, таким языком никто не будет пользоваться. Это не интерфейс ворда или фотошопа.

Хороший инженер знает свои инструменты

А что с ним не так? Оно же идет по правилам. Причем сведено до если-то. Если лень прочесть спецификацию языка, то да, будет не понятно.

Омикрон: почему паниковать рано

Для получения более заразного и опасного вируса - продлите прописку?

Омикрон: почему паниковать рано

На паникующих легче заработать, можно любую дичь втирать.

Что нужно программисту?

Скоро хабр переименуют в твиттер и ограничат длинну статьи в 255 символов.

Пол Грэм: «Нечто большее, чем интеллект»

Ei incumbit probatio qui dicit, non qui negat

Как сделать проект на Java Spring Boot?

Использовать Page нежелательно, потому что это всегда 2 запроса к БД - 1 выбор данных, 2 подсчет числа доступных элементов. В вашем случае нет фильтров, но в если они будут, то можно легко повесить БД под нагрузкой таким образом.

Есть в спринге класс Slice - это тот же Page, но без вычисления количества страниц и элементов, желательно использовать именно его. Работать будет быстрее, а если нужно вычислять количество подходящих страниц и элементов, то фронту лучше делать 1 запрос в специальный эндпоинт для этого.

Правда в спринге как-то странно поддержка этого класса сделана, в последний раз когда с ним работал приходилось делать свою имплементацию репозитория, что бы спеку поддерживать:

@NoRepositoryBean
public class JpaSpecificationRepositoryWithSliceImpl<T, ID extends Serializable>
        extends SimpleJpaRepository<T, ID>
        implements JpaSpecificationRepositoryWithSlice<T, ID> {
    private final EntityManager em;

    public JpaSpecificationRepositoryWithSliceImpl(JpaEntityInformation<T, ?> entityInformation, EntityManager em) {
        super(entityInformation, em);
        this.em = em;
    }

    @Transactional(readOnly = true)
    @Override
    public Slice<T> sliceAll(Specification<T> spec, Pageable pageable) {
        var list = this.getQuery(spec, pageable)
                .setFirstResult((int) pageable.getOffset())
                .setMaxResults(pageable.getPageSize())
                .getResultList();
        return new SliceImpl<>(list);
    }

    @Transactional(readOnly = true)
    @Override
    public Slice<T> sliceAll(Pageable pageable) {
        var cb = em.getCriteriaBuilder();
        var q = cb.createQuery(getDomainClass());
        var f = q.from(getDomainClass());
        q.select(f);
        q.orderBy(QueryUtils.toOrders(pageable.getSort(), f, cb));
        var list = em.createQuery(q)
                .setFirstResult((int) pageable.getOffset())
                .setMaxResults(pageable.getPageSize())
                .getResultList();
        return new SliceImpl<>(list);
    }
}

Разница между Page и Slice на 1 000 000 элементов даже без фильтров будет весьма ощутимой уже на глаз. В первом случае вся БД всегда читается, во втором только кусочек ограниченный размером страницы.

Архитект Проггер и кабинет приемной комиссии

В начале вы говорите, что никакой новизны нет и уже все сделано. Теперь вы говорите, что все что предложено чушь и не имеет смысла, поэтому смотреть что там дальше тоже.

Как-то быстро вы переобуваетесь.

Архитект Проггер и кабинет приемной комиссии

Такой вариант технически реализовать можно, но сложнее, хотя внимательный разработчик увидит в модели данных лазейку, как это можно сделать, но тогда пропадет возможность почти в реальном времени видеть свою позицию. Не в курсе того, как это реализовано на Украине.

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

Основной фишкой предложенного мой варианта в том, что в этапе 4 у абитуриента есть максимальная полнота информации, а главное, что у всех абитуриентов уже отправлено согласие куда именно он желает поступить, а так как это означает лишь изменение собственного выбора, то маловероятно, что таких людей будет много. Вы правда думаете, что из топового вуз стобальник заберет документы, что бы идти куда-то еще? Если списки публичные, то особо активные могут и проверить куда поступает еще абитуриент №123134, а то и вовсе ссылку ставить, что он выбрал институт такой-то, перейти к списку поступающих. Сам процесс будет более предсказуемым. Я уверен, что 90% абитуриентов даже не будут пользоваться своим правом изменить согласие на поступление, потому что уже на момент дачи согласия (3 этап) можно будет увидеть кто поступает и с какими баллами, потому что новых людей в список поступающих добавить нельзя.

Архитект Проггер и кабинет приемной комиссии

Просто наболело от всяких собак на сене, у которых "все же хорошо, чего ты дергаешься?".

И повторюсь, это статья техническая и цель - обучение разработчиков писать нормальный софт.

Не поймите меня не правильно, но позицию этого человека я не поддерживаю, потому что позиция заключается в "не я такой, жизнь такая". Любой закон - это только бумажка, которую изменить можно, была бы воля это делать. Любая организация - это всего лишь договоренность, которую можно изменить, была бы воля это делать. А ее судя по всему нет, поэтому нам и предлагают постоянно одно и то же блюдо "Ешьчёдали".

что делится фактами из практики и сообщает то, что иначе пришлось бы выуживать.

Он лишь сообщил, что предложенное мной уже в той или иной степени существует, хотя разница есть и он это указал. А раз оно уже почти такое же, то я вообще не вижу проблем в том, что бы сделать одну федеральную систему. Тем более что архитектура позволяет каждую минуту обновлять состояние для всех вуз страны в виде сгенерированных html, которые как статику можно раздавать еще быстрее. Хотя опять же, финальный вариант решения зависит от специфики, и той информации, что он предоставил - не достаточно для этого.

Архитект Проггер и кабинет приемной комиссии

Государство так не работает, потому что кому-то нужно именно так, как оно сейчас есть - свисток для жопы.

Человек вам пытался объяснить, что есть решения грамотные, а есть не грамотные.

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

Скорее КНР для своих 100 млн абитуриентов сделает подобную платформу, чем в РФ что-то сделают хотя бы на троечку, потому что за последние 30 лет как-то в среднем даже неуд ставить сложно.

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность