Coerência de dados
Dados coerentes são dados iguais 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. Outros 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 de volta, outro usuário poderá fazer check-out.
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 cache local de dados coerentes é bastante simples quando você tem um thread em um cliente acessando um arquivo em toda a 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 de dados.
Uma situação mais comum é um thread modificando o arquivo e muitos outros threads lendo-o. No momento em que uma operação de gravação ocorre, todos os caches locais desse arquivo sã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 fazer check-out do arquivo, fazer alterações e, em seguida, verificar 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.