The Z39.50 protocol is a standard network language for searching and retrieving records from remote databases. The Z39.50 client/server session model provides multiple abstract views of records, depending on whether searching, retrieval, or element selection is taking place. The underlying network stream that carries user queries, database records, diagnostics, and protocol control information is structured according to the Basic Encoding Rules (BER) as applied to human readable specifications written in the Abstract Syntax Notation, ASN.1.
Several important decisions face creators of Z39.50 servers. Building the BER transport mechanism may be done from scratch or with software tools compiled from ASN.1. Developing a model for managing result sets (records resulting from a query) is required by the stateful nature of Z39.50. A switch may need to be designed to route a query to one of several database engines for resolution, depending on which engine or database management system administers the database(s) being searched. In order to respond to search cancel requests, a server's input system must be at least partially asynchronous. Performance requirements may favor a multi-threaded design over a simpler single-threaded design.