Dos desenhos animados: Como explicar a sua namorada que está otimista e pessimista bloqueio bloqueio | manchetes de tecnologia

Este artigo é reproduzido com permissão de Rambling Programação (ID: mhcoding)

Recentemente, 51 pequeno tempo de férias do feriado para ajustar, e decidiu aproveitar o feriado para sair e jogar. A minha namorada e boa discussão, eu sou responsável por fazer a viagem, ela foi responsável pela compra de produtos de viagem. Não tem problema, eu estava em vários paridade, não sei o que aconteceu, namorada buy buy buy mesmo chateado.

Controle de concorrência

Mais cedo, enviei um artigo "Como explicar para sua namorada que é a simultaneidade e paralelismo", o artigo, introduzimos a simultaneidade e paralelismo. Quando a situação pode ocorrer programa concorrente, precisamos de alguns meios para garantir a precisão no caso de dados concorrente, isto significa assegurar os resultados quando estiver operando com usuários e outros usuários, e obteve seu sozinho os resultados da oração quando a operação é a mesma.

Esta ferramenta é chamado controle de concorrência. A finalidade do controle de concorrência é garantir que o trabalho de um usuário não funcionará com o impacto de outro usuário razoável.

não fazer o controle de concorrência, que poderia levar a leituras sujas, leituras fantasmas e não-repetíveis Leia outras questões.

Costumamos dizer que o controle de concorrência, em geral, e sistemas de gerenciamento de banco de dados (SGBD) relacionadas com a tarefa no controle DBMS concorrência é para garantir o isolamento e não destruir a unidade dos assuntos quando várias transações acessar simultaneamente os mesmos dados e banco de dados a unidade do banco de dados.

Os principais meios de alcançar o controle de concorrência pode ser dividido em simultaneidade otimista e controle de simultaneidade pessimista de dois.

Antes de chegar a ser claro: Ou pessimista ou otimista bloqueio de bloqueio, o conceito de pessoas estão fora da definição, ele pode ser considerado uma idéia. Não é só sistema de banco de dados relacional, o conceito de bloqueio otimista e pessimista, como memcache, hibernate, Tair e outros têm conceitos semelhantes. Portanto, não devemos tomar o bloqueio otimista, pessimista de travamento, e outra de bloqueio de banco de dados para comparação.

bloqueio pessimista

Quando queremos pedaço de dados em um banco de dados pode ser modificado, a fim de evitar ao mesmo tempo ser modificado por outras pessoas, a melhor maneira é dirigir os dados bloqueado para evitar concorrente.

Isto significa que a base de dados mecanismo de bloqueio para bloqueio antes de alterar os dados, em seguida, o modo de realização modificado é chamado controle de concorrência pessimista (também conhecido como "bloqueio pessimista", pessimista Controle de concorrência, abreviado "CCP").

A razão é chamado de bloqueio pessimista, porque esta é uma atitude pessimista tem que modificar a maneira como o controle de concorrência de dados. Nós geralmente acreditam que a probabilidade da modificação concorrente dos dados é relativamente grande, então você precisa de bloqueio antes de modificar.

controle de simultaneidade pessimista é na verdade um "bloqueio e depois tome a primeira visita", a estratégia conservadora, para fornecer uma garantia para a segurança de processamento de dados.

Mas em termos de eficiência de processamento, mecanismo de travamento do banco de dados irá resultar em despesas adicionais, bem como aumentar a probabilidade de um bloqueio; Além disso, vai reduzir a concorrência, se uma transação bloqueia uma linha de dados, outras transações deve aguardar a transação é processada antes que ele possa ser processado linhas de dados.

travamento optimista

bloqueio otimista (bloqueio otimista) é relativamente pessimista em termos de bloqueio, bloqueio otimista assume que os dados geralmente não causa conflito, assim que seja tempo para apresentar atualizado antes conflito formal ou não os dados são detectados nos dados, se for encontrado para o conflito e, em seguida, permitir que os usuários retornar uma mensagem de erro, permitindo que os usuários decidir o que fazer.

No que diz respeito ao bloqueio pessimista, quando o processamento de base de dados, e não vai usar o mecanismo de bloqueio de bloqueio optimista fornecidos pela base de dados. aplicação geral maneira bloqueio otimista é a versão de dados registro.

controle de concorrência otimista acredita que a probabilidade de corridas de dados (raça de dados) entre a transação é relativamente pequena, de modo a tornar dirigi-lo, até que submetidos apenas à fechadura, por isso não terá quaisquer bloqueios e impasses.

implementação de bloqueio pessimista

Implementar bloqueio pessimista, muitas vezes dependem mecanismo de travamento fornecido pela base de dados. Na base de dados, o processo de bloqueio pessimista é como se segue:

  • Antes de modificar os registos, primeira tentativa para o registo mais bloqueio exclusivo (encaixe exclusivo).
  • Se o bloqueio falhar, indicando que o registro está sendo modificado, em seguida, a consulta atual pode ter que esperar ou lançar uma exceção. DETALHADA responde ao desenvolvedor de acordo com as necessidades reais.
  • Se o bloqueio bem sucedido, então você pode fazer alterações para o registro, após a conclusão da transação será desbloqueada.
  • Se houver outros durante a gravação para fazer alterações ou adicionar operação de bloqueio exclusivo será esperando por nós para desbloquear ou lance direta.

Nós levar mais comumente utilizado motor de MySql Innodb, por exemplo, para explicar como usar o bloqueio pessimista em SQL.

Para usar o bloqueio pessimista, temos que desligar banco de dados mysql propriedade autocommit porque o modo autocommit MySQL padrão, isto é, quando você executar uma atualização, o MySQL irá enviar imediatamente os resultados. Conjunto de confirmação automática = 0;

Nós dar um exemplo simples, como Taobao necessidades de inventário processo de dedução única para explicar como usar o bloqueio pessimista:

0 // Iniciar uma transação começar; // 1. Confira as informações de inventário mercadoria selecionar a quantidade de itens, onde id = 1 para atualização; // 2. estoque de mercadorias Modificar de 2 itens de atualização definir quantidade = 2, onde id = 1; // 3. Confirmar a transação commit;

Acima, antes da gravação das alterações 1 id =, a ser bloqueado para atualização pelo caminho, e depois modificá-lo. Isto é típico estratégia de bloqueio pessimista.

Se o acima ocorre simultaneamente modificar o código de ações, ao mesmo tempo, apenas um thread pode abrir transação e obter uma ID de bloqueio = 1, outras transações só pode ser executado e depois deste commits transação. Desta forma, podemos garantir que os dados atuais não é modificada por outras transações.

Mencionado acima, vamos usar o seleto ... para atualizar dados para bloquear, mas precisamos prestar atenção ao nível de alguns dos bloqueios, MySQL InnoDB o bloqueio em nível de linha padrão. bloqueio de nível de linha é baseado no índice, se uma instrução SQL não é menos do que o bloqueio de nível de linha de índice, e usa bloqueio no nível de tabela para bloquear a tabela inteira, e que precisa de atenção.

implementação de bloqueio optimista

Use mecanismo de bloqueio otimista para bloquear você não precisa da ajuda de um banco de dados.

O otimista bloqueio conceito de fato, já definida seus detalhes de implementação específica: principalmente duas etapas: detecção de colisão e atualizações de dados. Isto é conseguido há um mais típico é a troca Compare e (CAS).

CAS é uma técnica de bloqueio otimista prazo, quando vários segmentos tentar usar o CAS simultaneamente atualizar a mesma variável, apenas um thread pode atualizar os valores das variáveis e outros tópicos falharam, o fracasso do segmento não será suspenso, mas é a falta de informação da competição, e você pode tentar novamente.

Por exemplo, o problema de inventário deduções anterior, podemos alcançar o seguinte por bloqueio otimista:

// confira as informações de inventário mercadoria, quantidade = 3 selecione a quantidade de itens, onde id = 1 // modificar estoque de mercadorias de 2 itens de atualização definir quantidade = 2, onde id = 1 e quantidade = 3;

Ou mais, antes de atualizar, verifique primeiro o que o atual inventário de estoque mesa número (quantidade), e em seguida, fazer a atualização quando se trata de inventário como condição modificação. Quando nos submetemos a tabela banco de dados atualizado para determinar o registro correspondente do número de inventário atual para comparar com o número retirado do inventário pela primeira vez, se a tabela de banco de dados de inventário atual com o primeiro retirado do inventário contar igual, ser atualizado, de outra forma considerados dados velhos.

Acima de instrução de atualização não é uma questão mais importante, ou seja, o problema ABA lendária.

Por exemplo, um segmento removido da base de dados de inventário 3, desta vez, também os outros dois 3 de fio a partir da base de dados de inventário, e executar duas operações em um número 2, 3 e tornar-se duas número de stock, por sua vez, neste momento uma thread foram encontrados na base de dados do CAS ainda é 3, então uma operação bem sucedida. Apesar do sucesso da operação de rosca CAS um, mas isso não significa que o processo não é um problema.

Existe uma maneira melhor de resolver o problema ABA, e que é através de uma versão separada pode estar em ordem de campo aumentando. Pode ser substituída pelas seguintes maneiras:

// confira as informações mercadoria, versão = 1 selecione a versão a partir de itens, onde id = 1 // modificar estoque de mercadorias de 2 atualização itens set quantidade = 2, versão = 3, onde id = 1 e versão = 2;

bloqueio otimista cada vez que modificar dados de operação, trará um número de versão, uma vez que o número da versão e o número da versão dos mesmos dados podem ser executados executar uma operação modificar e número da versão, caso contrário, ele falhar. Porque o número da versão de cada operação será aumentado, de modo que o problema ABA não ocorre porque o número da versão só vai aumentar.

versão à parte, como timestamp usado, porque o timestamp dos recursos naturais tendo em ordem crescente.

Na verdade, o SQL acima ainda tem alguns problemas, Uma vez que o cabelo é um momento de alta concorrência, apenas um thread pode ser modificado com sucesso, ele vai ter um monte de fracasso.

Para tal como o local fornecedor Taobao eletricidade, alta concorrência é frequentemente o caso, o fracasso total para permitir que os usuários percebam claramente irracional. Então, ainda encontrar uma maneira de reduzir o tamanho de bloqueio otimista.

Há uma boa sugestão, você pode reduzir a intensidade de bloqueio otimista, o maior grau de aumentar a produtividade e melhorar a concorrência! Da seguinte forma:

// modificar ações de commodities item de atualização conjunto quantidade = quantidade - 1 onde ID = 1 e a quantidade - 1 >  0

instrução SQL acima, se o usuário é um singular, pela quantidade - 1 >  Para o modo de controlo de bloqueio optimista 0.

Acima de instrução de atualização, no processo de implementação, em uma única operação atômica irá verificar o seu valor sobre a quantidade, e deduzi-lo off 1.

Bloqueio de granularidade para ambiente de alta concorrência de controle é um conhecimento importante escolher um bom bloqueio, num caso em que a segurança dos dados pode aumentar consideravelmente o rendimento e, assim, melhorar o desempenho.

Como escolher

Na escolha do bloqueio otimista superior e bloqueio pessimista, a principal diferença entre os dois olhar sobre ele, bem como cenários de aplicação.

  • Não realmente otimista bloqueio de bloqueio, de alta eficiência. Uma vez que a granularidade do bloqueio tratado mal, a probabilidade de falha da atualização será relativamente alta, propenso a falhas de negócio.
  • bloqueio pessimista depende de uma base de dados de bloqueio e ineficiente. probabilidade de falha de atualização é relativamente baixo.
  • Com três arquitetura da Internet de alta (alta concorrência, alto desempenho, alta disponibilidade) proposto, tem sido cada vez menos bloqueio pessimista é utilizada em um ambiente de produção, especialmente de concorrência do que os cenários de negócios maiores.

    "Tempo de barganha 'não encontrou o Galo pequeno presente certo? Eu estou pronto para você!
    Anterior
    Depois que uma mulher âncora retorno LOL forte vestindo um maiô bem-estar infantil do Sul fez um grande show jogos ao vivo!
    Próximo