KDB+ Architecture
Q Programming Language
- Q - Message Handler (.Z Library)
- Q - Inter-Process Communication
- Q Language - Queries
- Q Language - Built-in Functions
- Q Language - Functions
- Q Language - Joins
- Q Language - Verb & Adverbs
- Q Language - Table
- Q Language - Dictionaries
- Q Language - Indexing
- Q Language - Lists
- Q Language - Temporal Data
- Q Language - Type Casting
- Q Programming Language
Q Advanced Topics
- Q Language - Maintenance Functions
- Q Language - Tables on Disk
- Q Language - Table Arithmetic
- Q Language - Functional Queries
- Q Language - Attributes
KDB+ Useful Resources
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Q Language - Message Handler
When a q process connects to another q process via inter-process communication, it is processed by message handlers. These message handlers have a default behavior. For example, in case of synchronous message handpng, the handler returns the value of the query. The synchronous handler in this case is .z.pg, which we could override as per requirement.
Kdb+ processes have several pre-defined message handlers. Message handlers are important for configuring the database. Some of the usages include −
Logging − Log incoming messages (helpful in case of any fatal error),
Security − Allow/disallow access to the database, certain function calls, etc., based on username / ip address. It helps in providing access to authorized subscribers only.
Handle connections/disconnections from other processes.
Predefined Message Handlers
Some of the predefined message handlers are discussed below.
.z.pg
It is a synchronous message handler (process get). This function gets called automatically whenever a sync message is received on a kdb+ instance.
Parameter is the string/function call to be executed, i.e., the message passed. By default, it is defined as follows −
.z.pg: {value x} / simply execute the message received but we can overwrite it to give any customized result. .z.pg : {handle::.z.w;value x} / this will store the remote handle .z.pg : {show .z.w;value x} / this will show the remote handle
.z.ps
It is an asynchronous message handler (process set). It is the equivalent handler for asynchronous messages. Parameter is the string/function call to be executed. By default, it is defined as,
.z.pg : {value x} / Can be overriden for a customized action.
Following is the customized message handler for asynchronous messages, where we have used the protected execution,
.z.pg: {@[value; x; errhandler x]}
Here errhandler is a function used in case of any unexpected error.
.z.po[]
It is a connection open handler (process-open). It is executed when a remote process opens a connection. To see the handle when a connection to a process is opened, we can define the .z.po as,
.z.po : {Show “Connection opened by” , string h: .z.h}
.z.pc[]
It is a close connection handler (process-close). It is called when a connection is closed. We can create our own close handler which can reset the global connection handle to 0 and issue a command to set the timer to fire (execute) every 3 seconds (3000 milpseconds).
.z.pc : { h::0; value “\t 3000”}
The timer handler (.z.ts) attempts to re-open the connection. On success, it turns the timer off.
.z.ts : { h:: hopen `::5001; if [h>0; value “\t 0”] }
.z.pi[]
PI stands for process input. It is called for any sort of input. It can be used to handle console input or remote cpent input. Using .z.pi[], one can vapdate the console input or replace the default display. In addition, it can be used for any sort of logging operations.
q).z.pi .z.pi q).z.pi:{">", .Q.s value x} q)5+4 >9 q)30+42 >72 q)30*2 >60 q)x .z.pi >q) q)5+4 9
.z.pw
It is a vapdation connection handler (user authentication). It adds an extra callback when a connection is being opened to a kdb+ session. It is called after the –u/-U checks and before the .z.po (port open).
.z.pw : {[user_id;passwd] 1b}
Inputs are userid (symbol) and password (text).
Advertisements