From 5732f4c0cbc62b0553dba5e401b52012a598b004 Mon Sep 17 00:00:00 2001 From: VyacheslavHashov Date: Tue, 21 Feb 2017 01:35:22 +0300 Subject: [PATCH] Updated README.md --- .images/requests.png | Bin 15690 -> 15936 bytes README.md | 23 ++++++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.images/requests.png b/.images/requests.png index 31cf48ef3a4852b666b91c300a81a808db72c82a..22e4c9653877340ee54cd35b5a9c88377d10a094 100644 GIT binary patch literal 15936 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 KWAR7MT=@^NxB2S; literal 15690 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 RfV)qTIwp5C_VBr1{tqafNRR*k diff --git a/README.md b/README.md index 8b18ff8..f7714be 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,8 @@ # Postgres-wire A native Haskell driver for PostgreSQL. -## Features ## -* No dependencies on C libraries such as libpq-dev. -* Concise Haskell API. -* Binary protocol support. -* First-class notifications support. -* Sending multiple queries in a single batch. -* Built-in prepared statement cache. -* Fast serialization/deserialization. -* Designed with performance in mind. +Postgres-wire is an efficient implementation of the PostgreSQL binary protocol +designed specifically for the high performance and low latency. ## Performance ## @@ -19,6 +12,18 @@ A native Haskell driver for PostgreSQL. Each test consisted of running queries that select 300 rows of 100 bytes each in a loop with 8 concurrent connections to the database server for 10 seconds. The benchmark results were obtained from Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz, 32 GB DDR4, PostgreSQL 9.5.5. +## Features ## +* No dependencies on C libraries such as libpq-dev. +* Concise Haskell API. +* First-class notifications support. +* Sending multiple queries in a single batch. +* Built-in prepared statement cache. +* Fast serialization/deserialization. +* In progress. Built-in TLS. +* In progress. Encoders/decoders for built-in PostgreSQL types and advanced types: arrays, ranges, composites. + +## Documentation and examples +Will be available on Hackage. [badge-travis]: https://img.shields.io/travis/postgres-haskell/postgres-wire.svg