2011-10-12 19 views
13

Tôi thấy Tiết kiệm và Bộ đệm giao thức được đề cập rất nhiều, nhưng tôi thực sự không hiểu những gì chúng được sử dụng. Từ hiểu biết hạn chế của tôi, về cơ bản chúng được sử dụng khi bạn muốn thực hiện tuần tự chéo, ví dụ: khi bạn có một số cấu trúc dữ liệu bằng một ngôn ngữ mà bạn muốn gửi tới một chương trình khác được viết bằng ngôn ngữ khác.Trình tiết kiệm Apache và Bộ đệm giao thức của Google được sử dụng để làm gì?

Điều này có đúng không? Chúng được sử dụng cho bất cứ điều gì khác?

(Từ sự hiểu biết hạn chế một lần nữa, tôi nghĩ tiết kiệm và Buffers Nghị định thư về cơ bản hai phiên bản khác nhau của cùng một điều - cảm thấy tự do để chính xác cho tôi hay phức tạp.)

+2

Chúng là định dạng thông báo "đã nhập" để mã hóa nhị phân hiệu quả một tập hợp các kiểu dữ liệu nguyên thủy (không cần bộ mã hóa tùy chỉnh rõ ràng khi chúng sử dụng trình tạo tin nhắn). Hữu ích như một cơ chế trao đổi hoặc lưu trữ (serialization). Vì định dạng được xác định rõ, nó có thể được chia sẻ qua các ngôn ngữ (được thực hiện), được chia sẻ bởi các quá trình từ xa sử dụng cùng một ngôn ngữ hoặc được sử dụng để tuần tự hóa (hoặc không có điều gì) trong một quá trình. Và có, họ đang có hiệu quả chiến đấu cho cùng một thị trường (cũng như Avro và những người khác). –

+0

Tôi nghĩ rằng những điều này nên được liên kết: [Sự khác biệt lớn nhất của Bộ đệm giao thức với bộ đệm giao thức?] (Http://stackoverflow.com/q/69316/320399) – blong

Trả lời

18

Họ là giao thức serialization, chủ yếu. Bất cứ khi nào bạn cần chuyển dữ liệu giữa các máy hoặc các quá trình, hoặc lưu trữ dữ liệu trên đĩa vv, nó cần phải được tuần tự hóa.

Xml/json/etc work ok, nhưng chúng có một số chi phí nhất định khiến chúng trở nên không mong muốn - ngoài các tính năng hạn chế, chúng tương đối lớn và tốn kém tính toán để xử lý theo một trong hai hướng. Kích thước có thể được cải thiện bằng cách nén, nhưng điều đó sẽ tăng thêm chi phí xử lý. Họ có lợi thế là con người có thể đọc được, nhưng: hầu hết dữ liệu không được đọc bởi con người.

Hiện tại, mọi người có thể sử dụng các định dạng tẻ nhạt, bị lỗi, phụ tối ưu, không di động ít chi tiết hơn hoặc có thể sử dụng các định dạng tuần tự có mục đích chung đa nền tảng, giá rẻ để xử lý và được thiết kế bởi những người chi tiêu đến nay quá dài đáng lo ngại về việc tuần tự hóa để thân thiện - ví dụ, phiên bản chịu đựng. Lý tưởng nhất, nó cũng cho phép lớp mô tả trung lập nền tảng (nghĩ "wsdl" hoặc "mex") cho phép bạn dễ dàng nói "đây là dữ liệu trông như thế nào" cho bất kỳ nhà phát triển nào khác (không biết công cụ/ngôn ngữ/nền tảng nào) đang sử dụng), và yêu cầu họ tiêu thụ dữ liệu một cách không đau đớn mà không cần viết một bộ nối tiếp/trình gỡ rối mới từ đầu. .

Đó là nơi protobuf và tiết kiệm đến trong

Trong hầu hết các trường hợp khối lượng-khôn ngoan, tôi thực sự mong chờ cả hai đầu để được trong công nghệ tương tự trong cùng một công ty: đơn giản, họ cần phải nhận được dữ liệu từ A đến B với tối thiểu fuss và overhead, hoặc họ cần phải lưu trữ nó và tải nó trở lại sau (ví dụ, chúng tôi sử dụng protobuf bên trong redis blobs như là một bộ nhớ đệm thứ cấp).

+4

Vì vậy, về cơ bản chúng giống như Json hoặc XML nhưng ở định dạng nhị phân? – Gautam

+4

@GautamK về cơ bản, vâng. –

+2

Cảm ơn, Câu trả lời này thực sự làm sáng tỏ rất nhiều nghi ngờ tôi đã có. – Gautam

Các vấn đề liên quan