Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Чем плохо использование представления для получения агрегированных данных? Этот подход вполне работоспособен, но в действительности он подкладывает бомбу замедленного действия под всю нашу систему: ведь представление, которое является SQL-запросом, выполняется все медленнее и медленнее по мере накопления данных в системе.
Если Вы в Москве, приходите на джуг: jugmsk.timepad.ru/event/569994
Хорошо, когда у девелопера лучший IDE, лучшая система контроля версий, лучшая система для тестирования — всё это сейчас доступно только в языках общего назначения…
Всегда default-уровня достаточно.
Во-первых, serializable-транзакции генерируют больше блокировок
Даже если мы работаем с serializable-транзакциями, но с помощью курсоров, даже в пределах одного треда можно «выстрелить себе в ногу», как описано здесь. Serializable транзакция не поможет, ведь код, приведённый там в качестве примера, бежит в одном треде и в одной транзакции.
Кстати, встречаются и таблицы, записи в которых не обновляются, а только добавляются (книги операций, финансовые и товарные транзакции). Для них пляски с recversion — лишние. Такие таблицы можно объявить в CelestaSQL с постфиксом WITH NO VERSION CHECK и поле recversion создаваться на них не будет.
Кстати, встречаются и таблицы, записи в которых не обновляются, а только добавляются (книги операций, финансовые и товарные транзакции). Для них пляски с recversion — лишние. Такие таблицы можно объявить в CelestaSQL с постфиксом WITH NO VERSION CHECK и поле recversion создаваться на них не будет.
Это решалось бы настройкой грайна. Read only таблицы же есть, будут ещё и WORM-таблицы, в которых открывалась бы транзакция обычного типа.
Во-первых, serializable-транзакции генерируют больше блокировок
Потому что RDBMS работает со строками, а у вас часто происходит работа с полями в строках?
Я вопрос не очень понял. Вы спрашиваете, почему бы не применять всюду serializable транзакции? Почему у serializable транзакций ниже производительность? Ну более низкий performance — это расплата за то, что они serializable.
Не буду скрывать: идея с курсорами и recversion позаимствована из MS Dynamics ERP, там это именно так работает.
Нет, конечно, нет! Наш код реализует optimistic lock. СУБД реализуют serializable транзакции за счёт pessimistic locks.
Опять конечно нет. Потому что те курсоры доступны из СУБД-specific-языков, наши доступны на уровне Application Server и кросс-базданческие.
> Там же как раз описано как два пользователя работают и это, соответственно, в разных транзакциях происходит?
Почитайте чуть дальше первого абзаца))
Celesta и Flute: Создание бизнес-логики в Java-экосистеме