etcd4s alternatives and similar packages
Based on the "Database" category.
Alternatively, view etcd4s alternatives based on common mentions on social networks and blogs.
-
Slick
Slick (Scala Language Integrated Connection Kit) is a modern database query and access library for Scala -
Elastic4s
Elasticsearch Scala Client - Reactive, Non Blocking, Type Safe, HTTP Client -
PostgreSQL and MySQL async
Async database drivers to talk to PostgreSQL and MySQL in Scala. -
ScalikeJDBC
A tidy SQL-based DB access library for Scala developers. This library naturally wraps JDBC APIs and provides you easy-to-use APIs. -
scala-redis
A scala library for connecting to a redis server, or a cluster of redis nodes using consistent hashing on the client side. -
Phantom
Schema safe, type-safe, reactive Scala driver for Cassandra/Datastax Enterprise -
ReactiveMongo
:leaves: Non-blocking, Reactive MongoDB Driver for Scala -
rediscala
Non-blocking, Reactive Redis driver for Scala (with Sentinel support) -
Squeryl
A Scala DSL for talking with databases with minimum verbosity and maximum type safety -
SwayDB
Persistent and in-memory key-value storage engine for JVM that scales on a single machine. -
Pulsar4s
Idiomatic, typesafe, and reactive Scala client for Apache Pulsar -
scredis
Non-blocking, ultra-fast Scala Redis client built on top of Akka IO, used in production at Livestream -
Scala-Forklift
Type-safe data migration tool for Slick, Git and beyond. -
Scruid
Scala + Druid: Scruid. A library that allows you to compose queries in Scala, and parse the result back into typesafe classes. -
Clickhouse-scala-client
Clickhouse Scala Client with Reactive Streams support -
Tepkin
Reactive MongoDB Driver for Scala built on top of Akka IO and Akka Streams. -
ScalaRelational
Type-Safe framework for defining, modifying, and querying SQL databases -
lucene4s
Light-weight convenience wrapper around Lucene to simplify complex tasks and add Scala sugar. -
GCP Datastore Akka Persistence Plugin
akka-persistence-gcp-datastore is a journal and snapshot store plugin for akka-persistence using google cloud firestore in datastore mode.
Static code analysis for 29 languages.
Do you think we are missing an alternative of etcd4s or a related project?
Popular Comparisons
README
etcd4s
A Scala etcd client implementing V3 API using gRPC and ScalaPB with optional Akka Stream support. This project is in beta stage with basic test coverage and usable APIs.
Overview
This repo is a client library of etcd implementing V3 APIs using gRPC under the hood with optional Akka Stream support for stream APIs. This library implement the complete set of the APIs in the V3 protoal. More information about the APIs can be found here:
Note that this library do not support gRPC json gateway and use raw gRPC call instead (underlying is java-grpc). This project cross build against Scala 2.11, 2.12 and 2.13 and also tested against etcd 3.2.x, 3.3.x but fail under 3.4.x.
Getting Started
The core lib
libraryDependencies += "com.github.mingchuno" %% "etcd4s-core" % "0.3.0"
To include akka stream support for stream API
libraryDependencies += "com.github.mingchuno" %% "etcd4s-akka-stream" % "0.3.0"
Usage
import org.etcd4s.{Etcd4sClientConfig, Etcd4sClient}
import org.etcd4s.implicits._
import org.etcd4s.formats._
import org.etcd4s.pb.etcdserverpb._
import scala.concurrent.ExecutionContext.Implicits.global
// create the client
val config = Etcd4sClientConfig(
address = "127.0.0.1",
port = 2379
)
val client = Etcd4sClient.newClient(config)
// set a key
client.setKey("foo", "bar") // return a Future
// get a key
client.getKey("foo").foreach { result =>
assert(result == Some("bar"))
}
// delete a key
client.deleteKey("foo").foreach { result =>
assert(result == 1)
}
// set more key
client.setKey("foo/bar", "Hello")
client.setKey("foo/baz", "World")
// get keys with range
client.getRange("foo/").foreach { result =>
assert(result.count == 2)
}
// remember to shutdown the client
client.shutdown()
The above is wrapper for simplified APIs. If you want to access all underlying APIs with full options. You can use the corresponding api instance to have more control.
client.kvApi.range(...)
client.kvApi.put(...)
client.leaseApi.leaseGrant(...)
client.electionApi.leader(...)
If you want the Akka Stream support for the stream APIs, you should add the etcd4s-akka-stream
depns into your build.sbt
import org.etcd4s.akkasupport._
import org.etcd4s.implicits._
import org.etcd4s.pb.etcdserverpb._
import akka.NotUsed
// assume you have the implicit value and client needed in the scope
val flow: Flow[WatchRequest, WatchResponse, NotUsed] = client.watchApi.watchFlow
val request: WatchRequest = WatchRequest().withCreateRequest(WatchCreateRequest().withKey("foo"))
Source.single(request)
.via(flow)
.runForeach { resp =>
println(resp)
}
More example usage under the test dir in the repo.
Development
Requirment
- Java 8+, Scala 12.12.X+, sbt and docker
# to start a background etcd for development
docker-compose up -d
How to start?
Simple! Just sbt test
Publish
This is to remind me how to publish and may switch to sbt-release
later
- make sure you have
~/.sbt/gpg/
ready with pub/sec key paris - make sure you have
~/.sbt/1.0/sonatype.sbt
ready with credentials sbt "+clean" "+compile"
sbt "+publishSigned"
sbt sonatypeReleaseAll