Dentre as funcionalidades de um sistema que estou participando, que seria um download de conteúdo para um sistema offline.
Isto está sendo feito através de webservices.
Alguém sabe se é possível provisionar a o tamanho deste download, alguma função no banco que traz o tamanho dos registros em bytes… ou algo do tipo?
O ruim de tentar fazer isso via código java é que eu teria realmente que simular os selects para o obter este tamanho… e acredito que iria onerar o processamento.
No banco, se você tiver campos blob, não. Mas depois de montar o buffer que será enviado, deve ser fácil estimar o tamanho dos dados lá, no Java mesmo.
Se não tiver campos blob, basta olhar o tamanho de cada tipo de dado do banco. Essa informação geralmente está disponível no manual do BD. Em seguida, use o ResultSetMetaData para descobrir no Java o tipo das colunas e estimar o seu tamanho.
É mais confiável fazer essa estimativa no Java, pois muitos dados sofrem conversão quando você os lê no JDBC.
Um comentário nada a ver, sobre sua frase: “Os primeiros 90% de uma tarefa demora 90% de tempo a executar. Os restantes 10% demora outros 90%.” (Murphy)
Além do mau português, essa frase não tem nada a ver com Leis de Murphy. Ele parece ser uma versão modificada do princípio de Paretto:
Ele diz que “80% dos fenômenos vem de 20% das causas”.
Aplicando para o caso de software, 80% da demora de um software está em apenas 20% do código".
Legal, mas é como expliquei. Alguns tipos de dados tem tamanhos diferentes no Java, no banco e no seu protocolo. Por exemplo, não é incomum que o banco use uma codificação de texto (com 1 byte por caracter), o Java use Unicode (2 bytes) e você opte por transmitir o dados em ascii.
Por isso, talvez seja mais interessante medir o pacote depois de transformado no Java, quando ele estiver pronto para ser transmitido.
O banco de dados é um recurso tão crítico quanto o servidor de aplicação. Mover código para ele também é igualmente ruim. Eu diria, até pior, do que deixar no servidor de aplicação, pois geralmente é difícil aumentar o número de máquinas de banco, enquanto é fácil aumentar o número de máquinas de aplicação.