Partilhar via


Coerência dos dados

Os dados que são coerentes são dados que são os mesmos em toda a rede. Em outras palavras, se os dados forem coerentes, os dados no servidor e em todos os clientes serão sincronizados. Um tipo de sistema de software que fornece coerência de dados é um sistema de controle de revisão (RCS). Tal sistema é geralmente bastante simples, com apenas um usuário autorizado a modificar um arquivo especificado de cada vez. Outros podem ler o arquivo, mas não podem alterá-lo.

Diz-se que o usuário que pode alterar um arquivo fez check-out. Em seguida, o usuário faz check-in do arquivo modificado para que outras pessoas possam ver as alterações. Somente depois que o usuário fez check-in de um arquivo novamente é que outro usuário pode fazer check-out.

Um RCS requer a intervenção ativa dos utilizadores para funcionar de uma forma útil. Um sistema de arquivos que opera em uma rede deve lidar com o problema automaticamente.

Fornecer cache local de dados coerentes é bastante simples quando você tem um thread em um cliente acessando um arquivo pela rede de cada vez. No entanto, na maioria das situações, muitos threads diferentes em um ou mais computadores podem estar lendo o mesmo arquivo. Esta situação é ainda bastante simples. Como os dados no arquivo são estáticos, cada computador cliente pode ter sua própria cópia local sem implicações para a coerência dos dados.

Uma situação mais comum é um thread modificando o arquivo, e um monte de outros threads lendo-o. No momento em que ocorre uma operação de gravação, todos os caches locais desse arquivo ficam obsoletos. O servidor deve notificar cada cliente para abandonar seu cache. Quaisquer operações de leitura subsequentes para o arquivo devem ser executadas em toda a rede.

Em outra situação comum, vários threads em um ou mais clientes de rede podem tentar gravar no mesmo arquivo. Esta situação é semelhante a uma em que vários usuários RCS todos querem fazer alterações no mesmo arquivo. Cada usuário em sequência deve fazer check-out do arquivo, fazer alterações e, em seguida, fazer check-in do arquivo novamente. Da mesma forma, em um esquema de cache local, o servidor deve transferir o privilégio de gravar em um arquivo para um thread de cliente de cada vez.