Neks alternatives and similar packages
Based on the "Database" category.
Alternatively, view Neks alternatives based on common mentions on social networks and blogs.
-
erd
Translates a plain text description of a relational database schema to a graphical entity-relationship diagram. -
persistent-redis
Persistence interface for Haskell allowing multiple storage methods. -
acid-state
Add ACID guarantees to any serializable Haskell data structure -
postgresql-simple
Mid-level client library for accessing PostgreSQL from Haskell -
esqueleto
Bare bones, type-safe EDSL for SQL queries on persistent backends. -
HDBC-session
This repository includes a joined query generator based on typefull relational algebra, and mapping tools between SQL values list and Haskell record type. -
groundhog
This library maps datatypes to a relational model, in a way similar to what ORM libraries do in OOP. See the tutorial https://www.schoolofhaskell.com/user/lykahb/groundhog for introduction -
hw-kafka-client
Kafka client for Haskell, including auto-rebalancing consumers -
mysql-simple
A mid-level client library for the MySQL database, intended to be fast and easy to use. -
postgresql-simple-migration
PostgreSQL Schema Migrations for Haskell -
direct-sqlite
Low-level binding to SQLite3. Includes UTF8 and BLOB support. -
vcache-trie
large, persistent, memcached values and structure sharing for Haskell -
dbmigrations
A library for the creation, management, and installation of schema updates for relational databases. -
postgresql-typed
Haskell PostgreSQL library with compile-time type inference -
postgresql-orm
An Haskell ORM (Object Relational Mapping) and migrations DSL for PostgreSQL. -
ampersand
Build database applications faster than anyone else, and keep your data pollution free as a bonus. -
persistent-database-url
Parse DATABASE_URL into configuration types for Persistent
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Neks or a related project?
Popular Comparisons
README
Neks
A dead simple key/value server
Neks is an in-memory networked key/value server written in ~200 lines of Haskell.
It is intended to be very easy to modify.
Features
- Very simple
- Pretty fast (>1M transactions per second is easy, see Benchmark)
- Highly concurrent
- Atomic transactions (e.g. atomic read-and-swap)
- Optional disk persistence (with atomic snapshotting)
To install using Cabal:
cabal install neks
NeksServer <opt-args>
NeksClient <args>
To build and run from source (recommended):
cabal sandbox init
cabal install --only-dependencies
cabal run NeksServer
cabal run NeksClient -- <args>
or, with dependencies installed:
ghc -O2 -threaded Network/Neks/NeksServer.hs
ghc -O2 -threaded Network/Neks/NeksClient.hs
./Network/Neks/NeksServer +RTS -N<number of cores>
./Network/Neks/NeksClient <args>
To run the Python client:
python3 Client.py
To view instructions:
NeksServer --help
NeksClient --help
Benchmark:
The server and client run on two cores. The client runs
- 50 threads
- 200 requests per thread
- 50 reads and 50 writes per request
Speed depends on latency and bandwidth. Here's what I get on my home machines:
Avg. Latency | Transactions / Second |
---|---|
.1ms (localhost) | 1,150,000 |
.3ms (ethernet) | 1,100,000 |
3.5ms (wireless) | 750,000 |
Protocol:
All network encoding is done using msgpack.
Messages are preceded by the length of the message, transmitted as a 64-bit big-endian unsigned integer.
The client sends requests to the server, and the server responds with the results of the requests.
There are 4 kinds of requests:
- Requests to Get key
K
. These are formatted as[0, K]
. The server sends a response. - Requests to Set key
K
to valueV
. These are formatted as[1, K, V]
. The server does not send a response. - Requests to Delete key
K
. These are formatted as[2, K]
. The server does not send a response. - Requests to Atomically evaluate a list of requests
R
. This is formatted as[3, R]
. The server sends the response as if all requests inR
had been evaluated normally.
There are 2 kinds of responses:
- Response that the value
V
for requested keyK
was found. This is formatted as[-1, V]
. - Response that the value for requested key
K
was not found. This is formatted as[-2]
.
Example conversation:
Client: <message length>[[1,"status","OK"],[0,"Jim"],[0,"Dwight"]]
Server: <message length>[[-1,"Halpert"],[-1,"Schrute"]]