Fast and robust Cassandra driver for Elixir.
Xandra is a Cassandra driver built natively in Elixir and focused on speed, simplicity, and robustness. This driver works exclusively with the Cassandra Query Language v3 (CQL3) and native protocol v3, v4, and v5.
- 🎱 Connection pooling with automatic reconnections
- 🌯 Prepared queries (with local cache of prepared queries on a per-connection basis) and batch queries
- 📃 Page streaming
- 🗜️ LZ4 compression
- 👩👩👧👧 Clustering with support for autodiscovery of nodes in the cluster
- 🔁 Customizable retry strategies for failed queries
- 👩💻 User-defined types
- 🔑 Authentication
- 🔐 SSL encryption
See the documentation for detailed explanation of how the supported features work.
Add the :xandra
dependency to your mix.exs
file:
defp deps do
[
{:xandra, "~> 0.19"}
]
end
Then, run mix deps.get
in your shell to fetch the new dependency.
The documentation is available on HexDocs.
Connections or pool of connections can be started with Xandra.start_link/1
:
{:ok, conn} = Xandra.start_link(nodes: ["127.0.0.1:9042"])
This connection can be used to perform all operations against the Cassandra server. Executing simple queries looks like this:
statement = "INSERT INTO users (name, postcode) VALUES ('Priam', 67100)"
{:ok, %Xandra.Void{}} = Xandra.execute(conn, statement, _params = [])
Preparing and executing a query:
with {:ok, prepared} <- Xandra.prepare(conn, "SELECT * FROM users WHERE name = ?"),
{:ok, %Xandra.Page{}} <- Xandra.execute(conn, prepared, [_name = "Priam"]),
do: Enum.to_list(page)
Xandra supports streaming pages:
prepared = Xandra.prepare!(conn, "SELECT * FROM subscriptions WHERE topic = :topic")
page_stream = Xandra.stream_pages!(conn, prepared, _params = [], page_size: 1_000)
# This is going to execute the prepared query every time a new page is needed:
page_stream
|> Enum.take(10)
|> Enum.each(fn page -> IO.puts("Got a bunch of rows: #{inspect(Enum.to_list(page))}") end)
Xandra supports Scylla (version 2.x
to 5.x
) without the need to do anything in particular.
Xandra is released under the ISC license, see the LICENSE file.