Я должен действительно использовать транзакции в хранимых процедурах? [MSSQL 2005]

Я работаю в Android Studio и столкнулся с этой ошибкой при попытке создать подписанный APK для выпуска. Мне удалось создать и протестировать отладочную APK без проблем, но как только я захочу создать APK выпуска, процесс сборки будет работать в течение нескольких минут подряд, а затем окончательно завершится с помощью «Ошибка java.lang.OutOfMemoryError: GC превышение верхнего предела ". Я увеличил размеры кучи как для VM, так и для компилятора Android DEX, но проблема не устранена. Наконец, после многих часов и кружек кофе выяснилось, что проблема была в моем файле buildGradle на уровне приложения. У меня был параметр minifyEnabled для типа сборки релиза, установленного на «ложь», и, следовательно, работа с продуктами Proguard по коду, который не прошел через процесс сжатия кода (см. https://developer.android.com/studio/build/shrink-code.html ). Я изменил параметр «minifyEnabled» на «true», а сборка релиза была выполнена как сон:)

. Короче, мне пришлось изменить файл «build.gradle» на уровне приложения из: //. ..

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.sign_config_release
    }
    debug {
        debuggable true
        signingConfig signingConfigs.sign_config_debug
    }
}

//...

-

    //...

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.sign_config_release
    }
    debug {
        debuggable true
        signingConfig signingConfigs.sign_config_debug
    }
}

//...

7
задан Alireza 4 July 2017 в 10:15
поделиться

5 ответов

Многие люди спрашивают - мне нужны транзакции? Почему мне нужны они? Когда использовать их?

Ответ прост: используйте их все время, если у Вас нет очень серьезного основания не к (например, не используйте атомарные транзакции для "длительных операций" между компаниями). Значение по умолчанию должно всегда быть да. Вы вызываете сомнение? - используют транзакции.

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

Вот еще некоторая информация из http://blogs.msdn.com/florinlazar/

7
ответ дан 6 December 2019 в 21:22
поделиться

Помните в SQL Server всего отдельного оператора, операции CRUD находятся в неявной транзакции по умолчанию. Просто необходимо включить explict транзакции (НАЧНИТЕ TRAN), если необходимо заставить несколько операторов действовать как атомарная единица.

3
ответ дан 6 December 2019 в 21:22
поделиться

Ответ, он зависит. Вам не всегда нужна безопасность транзакции. Иногда это - излишество. Иногда это не.

Я вижу, что, например, когда Вы реализуете контроль, обрабатывают Вас, только хотят завершить его, после того как Вы собрали все данные и т.д. Думайте об оплате f'up, можно откатывать - это - пример, когда Вам нужна транзакция. Или возможно когда мудро использовать их.

Вам нужна транзакция при создании новой учетной записи пользователя? Возможно, если это через 10 таблиц (по любой причине), если это - просто единственная таблица затем, вероятно, нет.

Это также зависит от того, на чем Вы продали Вашему клиенту и кто они, и если они запросили это и т.д. Но если бы принятие решения ваше дело, затем я сказал бы, выбрал бы мудро.

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

1
ответ дан 6 December 2019 в 21:22
поделиться

Конечно, это зависит.

Это зависит от работы, которую конкретная хранимая процедура выполняет и, возможно, не так "отношение чтения-записи", что Вы предлагаете. В целом необходимо рассмотреть включение единицы работы в рамках транзакции, если это - запрос, на который мог бы повлиять некоторый другой, одновременно выполнив запрос. Если это звучит недетерминированным, это. Часто трудно предсказать, при каких обстоятельствах конкретная единица работы квалифицирует как кандидат на это.

Хорошее место для запуска состоит в том, чтобы рассмотреть точный CRUD, выполняемый в единице работы, в этом случае в рамках хранимой процедуры, и решить, могло ли это a) могло быть затронуто некоторым другим, одновременной операцией и b) если та другая работа имеет значение в конец результат этой выполняемой работы (или, даже, наоборот). Если ответ - "Да" к обоим из них, затем рассматривают обертывание единицы работы в рамках транзакции.

То, что это предлагает, - то, что Вы не можете всегда просто решать или использовать или не использовать транзакции, скорее необходимо применить их, когда это имеет смысл. Используйте свойства, определенные ACID (Атомарность, Непротиворечивость, Изоляция и Длительность), чтобы помочь решить, когда это могло бы иметь место.

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

К сожалению, это не легкий вопрос точно ответить: "Это зависит".

1
ответ дан 6 December 2019 в 21:22
поделиться

Используйте их если:

  1. Существуют некоторые ошибки, которые можно хотеть протестировать на и выгода, которая не будет поймана кроме Вами выход и выполнение работы (ищущий вещи, тестируя значения, и т.д.), обычно из транзакции так, чтобы можно было откатывать целую операцию.
  2. Существуют многоступенчатые операции любого вида, который должен, логически, откатываться как группа, если они перестали работать.
0
ответ дан 6 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: