2.3 KiB
cassandra.protocol
- Protocol Features
cassandra.protocol
Custom Payloads
Native protocol version 4+ allows for a custom payload to be sent between clients and custom query handlers. The payload is specified as a string:binary_type dict holding custom key/value pairs.
By default these are ignored by the server. They can be useful for servers implementing a custom QueryHandler.
See .Session.execute
, :.Session.execute_async
, .ResponseFuture.custom_payload
.
_ProtocolHandler
message_types_by_opcode
encode_message
decode_message
Faster Deserialization
When python-driver is compiled with Cython, it uses a Cython-based
deserialization path to deserialize messages. By default, the driver
will use a Cython-based parser that returns lists of rows similar to the
pure-Python version. In addition, there are two additional
ProtocolHandler classes that can be used to deserialize response
messages: LazyProtocolHandler
and
NumpyProtocolHandler
. They can be used as follows:
from cassandra.protocol import NumpyProtocolHandler, LazyProtocolHandler
from cassandra.query import tuple_factory
= LazyProtocolHandler # for a result iterator
s.client_protocol_handler = tuple_factory #required for Numpy results
s.row_factory = NumpyProtocolHandler # for a dict of NumPy arrays as result s.client_protocol_handler
These protocol handlers comprise different parsers, and return results as described below:
- ProtocolHandler: this default implementation is a drop-in replacement for the pure-Python version.
The rows are all parsed upfront, before results are returned.
- LazyProtocolHandler: near drop-in replacement for the above, except that it returns an iterator over rows,
lazily decoded into the default row format (this is more efficient since all decoded results are not materialized at once)
- NumpyProtocolHander: deserializes results directly into NumPy arrays. This facilitates efficient integration with
analysis toolkits such as Pandas.