O projeto possui um nome curto protobuf-Delphi e porteu parte do código do projeto dos buffers de protocolo para Java. Naquela época, esse projeto me pareceu mais claro e mais limpo em comparação com outras implementações.
Um projeto para análise e geração de código está em construção. Agora, mudamos para a fase da geração de código. Você pode enviar suas amostras de código e sua visão. Os desejos certamente serão considerados e bem -vindos.
Quando o Google enviou o código -fonte para buffers de protocolo para abrir código. Fiquei impressionado com as idéias por trás disso, a compactação dos dados e sua eficiência, a velocidade de seu processamento, especialmente em comparação com o XML.
A primeira versão do porto em Delphi foi preparada em 2007, durante o projeto no meu trabalho principal. Eu tive que transferir uma tabela grande com dados para o aplicativo cliente. Esta operação foi lenta. A tarefa era de alguma forma aumentar a velocidade do trabalho. e reduza a quantidade de tráfego enviado do servidor para o aplicativo cliente sobre HTTPS. Antes disso, o XML foi usado para os mesmos propósitos.
Depois que a transição para o formato de dados de buffers de protocolo foi concluída, tornou -se possível baixar muito mais dados e aumentar significativamente a produtividade.
Muito rapidamente, uma porta em Delphi foi feita, limitada em funcionalidade. As abstrações de protocolo de baixo nível foram implementadas, não havia geração de código. Mas isso não nos impediu de usá-lo em serviços da Web, e a funcionalidade implementada foi suficiente para o projeto.
Conhecendo a estrutura da mensagem, foi possível enviar e receber dados sobre este protocolo. Um ano depois, coloquei o código no site https://sourceforge.net/p/protobuf-delphi.
Provavelmente, muitas pessoas acharão interessante usar para armazenamento, tanto no disco quanto dentro do programa.
Se você conhece os recursos do armazenamento físico de dados no buffer de protocolo, pode fazer coisas interessantes.
No início de um registro, há um campo que armazena o comprimento do registro. Você também pode sempre pular campos de registros desnecessários. Dependendo do tipo, eles têm um comprimento fixo ou se o campo tiver um comprimento variável, o início do campo conterá o comprimento desse campo. Portanto, é fácil separar os registros um do outro e, às vezes, pode ser útil pular a parte desnecessária do registro.
Os dados na árvore podem ser indexados por uma estrutura de árvores B ou hashmap, por exemplo. Isso permite que você obtenha acesso aleatório rápido ao registro que você está procurando por chave.
O processo de leitura pode ser aplicado a um único registro embalado.
Os dados neste formato têm compressão significativa. Comparado ao armazenamento usual de objetos na memória:
Em nosso projeto, economizamos muito consumo de memória. comparado ao armazenamento de objetos normais. Em alguns casos, o ganho foi de 20 ou mais vezes e sem perda de velocidade de acesso a dados. Isso é especialmente útil se os dados forem imutáveis.
Formatos semelhantes são usados para armazenamento de dados físicos em DBMs industriais.
Ou seja, em mãos hábeis, esse formato de dados é uma coisa poderosa.
A propósito, é claro, nem tudo neste formato é uma invenção do Google. Pelo contrário, pouco foi inventado pelo Google.
As pernas IMHO crescem do formato ASN.1. Quando vi a documentação deste formato, fiquei surpreso com o quanto eles correspondem.
O mérito mais importante do Google para promover esse formato de dados e publicar o código -fonte em código aberto.
O ASN.1 é semelhante em propósito e usa para protocolo buffers e economia de Apache, que também são idiomas de descrição da interface para serialização de dados de plataforma cruzada. Como esses idiomas, ele possui um esquema (no ASN.1, chamado de "módulo") e um conjunto de codificações, tipicamente codificações de valor de comprimento de comprimento. No entanto, o Asn.1, definido em 1984, os antecede por muitos anos. Ele também inclui uma variedade mais ampla de tipos de dados básicos, alguns dos quais são obsoletos e têm mais opções de extensibilidade. Uma única mensagem ASN.1 pode incluir dados de vários módulos definidos em vários padrões, mesmo os padrões definidos anos de diferença.