Лучшие практики транзакций [закрываются]

Если вы хотите распаковать без программного обеспечения, лучше используйте этот код. Другой код с файлами в формате pdf отправляет ошибку при ручном распаковке

byte[] buffer = new byte[1024];     
    try
    {   
        FileOutputStream fos = new FileOutputStream("123.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
        ZipEntry ze= new ZipEntry("file.pdf");
        zos.putNextEntry(ze);
        FileInputStream in = new FileInputStream("file.pdf");
        int len;
        while ((len = in.read(buffer)) > 0) 
        {
            zos.write(buffer, 0, len);
        }
        in.close();
        zos.closeEntry();
        zos.close();
    }
    catch(IOException ex)
    {
       ex.printStackTrace();
    }
27
задан aku 5 September 2008 в 14:07
поделиться

8 ответов

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

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

8
ответ дан Sara Chipps 14 October 2019 в 14:33
поделиться

Я всегда обертываю транзакцию в оператор использования.

using(IDbTransaction transaction )
{
// logic goes here.
   transaction.Commit();
}

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

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

я нашел, что этот шаблон решительно уменьшил проблемы захвата записей.

18
ответ дан Simon Johnson 14 October 2019 в 14:33
поделиться

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

я предпочитаю клиентскую обработку транзакции где это возможно. Если Вы понижены к выполнению SPS или других серверных логических единиц работы, серверные транзакции прекрасны.

3
ответ дан DevelopingChris 14 October 2019 в 14:33
поделиться

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

3
ответ дан Greg Ogle 14 October 2019 в 14:33
поделиться

Это - интересная ссылка для вложенных транзакций T-SQL: http://aleemkhan.wordpress.com/2006/07/21/t-sql-error-handling-pattern-for-nested-transactions-and-stored-procedures/

0
ответ дан Daren Thomas 14 October 2019 в 14:33
поделиться

Ничего себе! Много вопросов!

, Пока год назад я не положился 100% на транзакции. Теперь его только 98%. В особых случаях веб-сайтов интенсивного трафика (как Sara упомянул) и также высоко разделил данные, осуществив потребность распределенных транзакций, transactionless архитектура может быть принята. Теперь необходимо будет кодировать ссылочную целостность в приложении.

кроме того, мне нравится управлять транзакциями декларативно с помощью аннотаций (я - парень Java), и аспекты. Это - очень очевидный способ для определения границ транзакции, и он включает функциональность распространения транзакции.

3
ответ дан Marcio Aguiar 14 October 2019 в 14:33
поделиться

Как сказала Сара Чиппс, транзакция является излишней для приложений с высоким трафиком. Так что мы должны избегать этого как можно больше. Другими словами, мы используем архитектуру BASE , а не ACID. Ebay - типичный случай. Распределенная транзакция вообще не используется в архитектуре Ebay. Но для конечной согласованности вы должны проделать какой-то трюк самостоятельно.

0
ответ дан 28 November 2019 в 05:32
поделиться

Транзакции на стороне сервера, 35 000 транзакций в секунду, SQL Server: 10 уроков из 35 000 транзакций в секунду

Мы используем только транзакции на стороне сервера:

  • могут начинаться позже и завершаться раньше
  • не распространяется
  • может выполнять работу до и после
  • SET XACT_ABORT ON означает немедленный откат при ошибке
  • не зависит от клиента / ОС / драйвера

Другое:

  • мы вкладываем вызовы, но используем @@ TRANCOUNT для обнаружение уже запущенных TXN
  • каждый вызов БД всегда атомарен

Мы имеем дело с миллионами строк INSERT в день (некоторые сгруппированы через промежуточные таблицы), полный OLTP, никаких проблем. Но не 35 тыс. Транзакций в секунду.

2
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

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