이 프로젝트에는 짧은 이름 Protobuf-Delphi가 있으며 Java 용 프로토콜 버퍼에서 프로젝트 코드의 일부를 포팅했습니다. 당시이 프로젝트는 다른 구현과 비교할 때 더 명확하고 깨끗해 보였습니다.
구문 분석 및 코드 생성 프로젝트가 건설 중입니다. 이제 우리는 코드 생성 단계로 옮겼습니다. 코드 샘플과 비전을 보낼 수 있습니다. 소원은 확실히 고려되고 환영받을 것입니다.
Google이 프로토콜 버퍼에 대한 소스 코드를 오픈 소스로 업로드했을 때. 나는 그 뒤에있는 아이디어, 데이터의 작품 및 효율성, 처리 속도, 특히 XML에 비해 놀랐습니다.
Delphi의 포트의 첫 번째 버전은 2007 년에 나의 주요 직업 프로젝트에서 준비되었습니다. 데이터가 포함 된 큰 테이블을 클라이언트 응용 프로그램으로 전송해야했습니다. 이 작업은 느 렸습니다. 작업은 어떻게 든 작업 속도를 높이는 것이 었습니다. 서버에서 HTTPS를 통해 클라이언트 응용 프로그램으로 전송 된 트래픽의 양을 줄입니다. 그 전에 XML은 동일한 목적으로 사용되었습니다.
프로토콜 버퍼로의 전환이 완료된 후에는 훨씬 더 많은 데이터를 다운로드하고 생산성을 크게 향상시킬 수있게되었습니다.
델파이의 항구가 제한되어 기능성이 제한되었습니다. 저수준 프로토콜 추상화가 구현되었으며 코드 생성이 없었습니다. 그러나 이것은 우리가 웹 서비스에서 그것을 사용하는 것을 막지 못했고, 구현 된 기능은 프로젝트에 충분했습니다.
메시지의 구조를 알면이 프로토콜에서 데이터를 보내고받을 수있었습니다. 1 년 후 나는 사이트 https://sourceforge.net/p/protobuf-delphi 사이트에 코드를 배치했습니다.
아마도 많은 사람들이 디스크와 프로그램 내에서 스토리지에 사용하는 것이 흥미로울 것입니다.
프로토콜 버퍼에서 데이터의 물리적 저장 기능을 알고 있다면 흥미로운 일을 할 수 있습니다.
레코드의 시작 부분에는 레코드의 길이를 저장하는 필드가 있습니다. 불필요한 레코드 필드를 항상 건너 뛸 수도 있습니다. 유형에 따라 길이가 고정 된 길이 또는 필드에 길이가 변하는 경우 필드의 시작에는이 필드의 길이가 포함됩니다. 따라서 레코드를 서로 분리하기 쉽고 때로는 레코드의 불필요한 부분을 건너 뛰는 것이 유용 할 수 있습니다.
예를 들어 트리의 데이터는 B- 트리 구조 또는 해시 맵으로 인덱싱 될 수 있습니다. 이를 통해 키가 찾고있는 레코드에 빠르게 무작위로 액세스 할 수 있습니다.
읽기 과정은 단일 포장 레코드에 적용될 수 있습니다.
이 형식의 데이터는 크게 압축됩니다. 메모리에있는 객체의 일반적인 저장과 비교할 때 :
우리 프로젝트에서 우리는 많은 메모리 소비를 절약했습니다. 일반 객체를 저장하는 것과 비교합니다. 어떤 경우에는 게인이 20 배 이상이었고 데이터 액세스 속도의 손실이 없었습니다. 이것은 데이터가 불변 인 경우 특히 유용합니다.
유사한 형식은 산업 DBM의 물리적 데이터 저장에 사용됩니다.
즉, 능숙한 손 에서이 데이터 형식은 강력한 것입니다.
그건 그렇고,이 형식의 모든 것이 Google의 발명은 아닙니다. 오히려 Google은 거의 발명되지 않았습니다.
IMHO 다리는 ASN.1 형식에서 자랍니다. 이 형식의 문서를 보았을 때 나는 그들이 얼마나 일치하는지 놀랐습니다.
이 데이터 형식을 홍보하고 오픈 소스로 소스 코드를 게시하는 데 Google의 가장 중요한 장점.
ASN.1은 목적이 유사하며 프로토콜 버퍼 및 Apache 중고품에 사용되며 크로스 플랫폼 데이터 직렬화를위한 인터페이스 설명 언어이기도합니다. 이러한 언어와 마찬가지로 스키마 (ASN.1, "모듈") 및 일반적으로 유형 길이의 값 인코딩 세트가 있습니다. 그러나 1984 년에 정의 된 ASN.1은 몇 년 동안 그들을 선언합니다. 또한 더 넓은 다양한 기본 데이터 유형이 포함되어 있으며 그 중 일부는 쓸모없고 확장 성을위한 더 많은 옵션이 있습니다. 단일 ASN.1 메시지에는 여러 표준으로 정의 된 여러 모듈의 데이터, 심지어 연도를 구분 한 표준까지도 포함될 수 있습니다.