store alternatives and similar packages
Based on the "data" category.
Alternatively, view store alternatives based on common mentions on social networks and blogs.
-
interpolatedstring-perl6
QuasiQuoter for Perl6-style multi-line interpolated strings with q, qq and qc support. -
language-hcl
language-hcl contains HCL (Hashicorp Configuration Language) parsers and pretty-printers for the Haskell programming language -
data-structure-inferrer
A program that analyzes source code with a data-structure wildcard and suggests the right one.
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of store or a related project?
README
store
The 'store' package provides efficient binary serialization. There are a couple features that particularly distinguish it from most prior Haskell serialization libraries:
- Its primary goal is speed. By default, direct machine
representations are used for things like numeric values (
Int
,Double
,Word32
, etc) and buffers (Text
,ByteString
,Vector
, etc). This means that much of serialization uses the equivalent ofmemcpy
.
We have plans for supporting architecture independent serialization - see #36 and #31. This plan makes little endian the default, so that the most common endianness has no overhead.
Another way that the serialization behavior can vary is if integer-simple is used instead of GHC's default of using GMP.
Integer
serialized with theinteger-simple
flag enabled are not compatible with those serialized without the flag enabled.- Instead of implementing lazy serialization / deserialization
involving multiple input / output buffers,
peek
andpoke
always work with a single buffer. This buffer is allocated by asking the value for its size before encoding. This simplifies the encoding logic, and allows for highly optimized tight loops. store
can optimize size computations by knowing when some types always use the same number of bytes. This allows us to compute the byte size of aVector Int32
by just doinglength v * 4
.
- Instead of implementing lazy serialization / deserialization
involving multiple input / output buffers,
It also features:
Optimized serialization instances for many types from base, vector, bytestring, text, containers, time, template-haskell, and more.
TH and GHC Generics based generation of Store instances for datatypes.
TH generation of testcases.
Utilities for streaming encoding / decoding of Store encoded messages, via the
store-streaming
package.
Gotchas
Store is best used for communication between trusted processes and local caches. It can certainly be used for other purposes, but the builtin set of instances have some gotchas to be aware of:
Store's builtin instances serialize in a format which depends on machine endianness.
Store's builtin instances trust the data when deserializing. For example, the deserialization of
Vector
will read the vector's length from the first 8 bytes. It will then allocate enough memory to store all the elements. Malicious or malformed input could cause allocation of large amounts of memory. See issue #122.Serialization may vary based on the version of datatypes. For example,
Text
serialized fromtext < 2
will not be compatible withText
fromtext >= 2
, because the internal representation switched from UTF-16 to UTF-8.
Blog posts
- Initial release announcement
- Benchmarks of the prototype
- New 'weigh' allocation benchmark package,
created particularly to aid optimizing
store
.