Coerência de dados

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

Diz-se que o usuário que pode alterar um arquivo o verificou. Em seguida, o usuário verifica o arquivo modificado para que outras pessoas possam ver as alterações. Somente depois que o usuário tiver verificado um arquivo novamente, outro usuário poderá marcar-lo.

Um RCS requer a intervenção ativa dos usuários para operar de maneira útil. Um sistema de arquivos que opera em uma rede deve lidar com o problema automaticamente.

Fornecer o cache local de dados coerentes é bastante simples quando você tem um thread em um cliente acessando um arquivo pela rede por 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 de dados.

Uma situação mais comum é um thread modificando o arquivo e muitos outros threads lendo-o. No momento em que ocorre uma operação de gravação, todos os caches locais desse arquivo estão obsoletos. O servidor deve notificar cada cliente para abandonar seu cache. Todas as 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. Essa situação é semelhante a uma em que vários usuários do RCS desejam fazer alterações no mesmo arquivo. Cada usuário em sequência deve marcar o arquivo, fazer alterações e, em seguida, marcar o arquivo de volta. Da mesma forma, em um esquema de cache local, o servidor deve entregar o privilégio de gravar em um arquivo em um thread de cliente por vez.