| Crates.io | clickhouse-connection-pool |
| lib.rs | clickhouse-connection-pool |
| version | 0.1.8 |
| created_at | 2025-03-27 09:30:16.808051+00 |
| updated_at | 2025-09-05 12:10:39.220092+00 |
| description | A connection pooling library for ClickHouse in Rust, built on top of deadpool. |
| homepage | |
| repository | https://github.com/ranger-finance/clickhouse-pool |
| max_upload_size | |
| id | 1607764 |
| size | 133,330 |
Clickhouse Connection Pool
A connection pooling library for ClickHouse in Rust, built on top of deadpool.
Add this to your Cargo.toml:
[dependencies]
clickhouse-connection-pool = "0.1.0"
use clickhouse_connection_pool::{ClickHouseConfig, ClickHousePool, RetryConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create configuration
let config = ClickHouseConfig::new(
"localhost".to_string(),
9000,
"default".to_string(),
"default".to_string(),
"".to_string(),
);
// Configure retry policy
let retry_config = RetryConfig::default();
let datalake_config = DatalakeConfig::new(config, retry_config);
// Create pool
let pool = ClickhouseConnectionPool::new(
config,
retry_config,
None, // Optional metrics
);
// Initialize pool (creates initial connections)
pool.initialize().await?;
// Check examples/simple-clickhouse for more notes
// on how to utilize PoolManager for retries
// with exponential backoff
// Graceful shutdown (waits for in-use connections)
pool.shutdown().await?;
Ok(())
}
let config = ClickHouseConfig::new(
"localhost".to_string(), // Host
9000, // Port
"my_database".to_string(), // Database name
"username".to_string(), // Username
"password".to_string(), // Password
);
// Set timeouts
config.connect_timeout_seconds = 10;
config.query_timeout_seconds = 30;
let retry_config = RetryConfig {
max_retries: 3,
initial_backoff_ms: 100,
max_backoff_ms: 5000,
backoff_multiplier: 2.0,
};
// Get current pool status
let status = pool.status();
println!("Active connections: {}", status.size);
println!("Available connections: {}", status.available);
// Get detailed statistics
let stats = pool.stats();
println!("Active: {}, In use: {}, Waiters: {}",
stats.size, stats.in_use, stats.waiters);