Carrier DB is the most memory efficient, secure, production oriented key-value database server.
Memory efficiency is an often ignored aspect of data storage. When you have multiple terabytes of expensive RAM, your budget cries every time you waste resources on unnecessary bloated data storage overhead.
Carrier DB is built with data efficiency and security from the ground up. Carrier DB uses custom memory-efficient data structures to store your in-memory data 200% to 1000% more efficiently than other in-memory databases (space savings based on data size vs. storage size considering all accounting metadata and data structure overhead).
Carrier DB implements design goals other in-memory databases completely ignore:
Carrier DB is an extension of the amazing Carrier Cache memcached replacement. Carrier DB supports all memcached commands from Carrier Cache in addition to dozens more features outlined below.
Carrier DB also supports the legacy redis protocol. We are currently increasing the number of supported built-in data structures accessible using legacy protocols.
As of right now Carrier DB supports strings, lists, HLLs, maps/dicts/hashes, sets, qsets, and qnsets. More data structures are showing up all the time, so join our mailing list to keep updated.
Carrier DB is an extremely multi-threaded database.
Carrier DB can efficiently be configured for hundreds or thousands of cores using terabytes of RAM all running under a single OS process (Note: values inside Carrier DB are currently limited to 281 terabytes maximum per item. Please let us know if you require higher limits.).
Carrier DB combines complex data structures, low latency atomic updates, and a massively multi-threaded architecture so your server doesn't collapse, stall, or become unresponsive due to large queries or greedy clients.
Encryption is a must-have feature these days. Any servers not giving you the option of connecting over TLS are being professionally irresponsible and opening up your company to increased liability. (Note: this was a more biting critique in 2019 when redis had still refused to implement TLS for 10 years because of single-maintainer feature prejudice.)
If your in-memory databases stores user information and you are not using TLS for client connections, you are likely not GDPR compliant.
To ensure best performance, Carrier DB uses independent decryption thread pools and encryption thread pools. Carrier DB concurrently decrypts requests while also encrypting replies giving you the fastest TLS performance possible.
Carrier DB has conquered the tyranny of 64-bit platforms by minimizing pointers inside all data structures.
Carrier DB stores all data in various succinct data structures we've created solely for the purpose of low overhead in-memory data storage capable of growing to dozens of terabytes of RAM.
Carrier DB actually implements the smallest data structures physically possible. No other systems approach the memory efficiency of Carrier DB.
Carrier DB enables serving data from multiple IP addresses. Each IP address can be configured with independent security, encryption, protocol, and performance options.
Each Carrier DB virtual network can:
Carrier DBbeta is ready for evaluation and production use.
Beta releases expect you to have familiarity with legacy memcached/redis commands. Carrier DB also shares the same scalable server architecture as Carrier Cache so configuration documentation is at Carrier Cache Tech Specs.
If you run into any problems, let us know so we can prioritize fixes for you.
Most features of Carrier DB have unique implementation details and have little to no equivalent in other databases when measured against memory efficiency and security guarantees.
Here's an overview of released and in-progress Carrier DB features:
qset
— deduplicating set storage with fast intersectionsqnset
— compact integer set storage with fast intersectionsIf your favorite command is currently missing, let us know what you need. We prioritize features based on request popularity.
notify [path-to-program]
directive[networkName] [listenAddress] [listenPort] [tls|notls] [protocol]
port 0
(so Carrier DB picks a random usable port on startup), your notify script can tell your infrastructure where your DB can be contacted.notifyUser [system username]
and notifyGroup [group name]
.nslock
.ns
, cs
, or hs
), the namespace could not be escaped unless you had admin permissions.ns
et al) and exited freely (nsreset
), but exiting a namespace is limited to the depth specified by nslock
.nslock
has two forms:
nslock
- set current namespace to the depth you get if you run nsreset
in the future.nslock [ns|cs|hs] namespaceDepth...
- lock client connection to the namespace (or cs or hs) specified.nslock ns a namespace to lock clients
is useful for the per-network namespace configuration directive as namespace "nslock ns my private namespace"
so clients will be unable to nsreset
to any level above my private namespace
.nslock
prevents clients from reaching higher namespaces. Clients can always access deeper namespaces and clients can further nslock
deeper namespaces, but once nslock
runs on a client (or when specified as part of a network configuration), the client will be unable to escape to any higher namespaces.KEYS
, VALS
, GETALL
, etc now returns an array of arrays populated by each worker independently.SYNTAX JSON
SYNTAX JSON
on each connection, you can set a default reply syntax on virtual networks with per-network config directive syntax json
(even if a network has a default syntax, each connection can run SYNTAX
to change reply syntax at any time).JSON
, you can also request SYNTAX PYTHON
or configure a network with syntax python
to return set-type output using Python set syntax (JSON has no 'set' built-in type, so in JSON, sets are printed as arrays).enableadmin
, disabledata
, enablestats
, readonly
), but those are now removed in favor of a simpler access
directive.access
config, you can enable access using a string with any combination of:
access "read"
access "read write"
access "stats"
access "admin stats read write"
access
must be specified for each listening interface. If no access
is defined, the default is to not allow any data access.random-with-memory
LRU accuracyecho | openssl s_client -connect [targetHost]:[targetPort] -reconnect
certchain
and privatekey
configure statements per network and Carrier DB takes care of the rest.namespace
directive describing the namespace all clients will be locked into before running any commands.namespace "nslock ns users"
— restrict all clients on Network A to the users
namespacenamespace "nslock ns stats"
— restrict all clients on Network B to a stats
namespaceqset
auto-indexes set elements to store elements only once on your entire server no matter how many times they are used in qsets
.qset
helps when you have many medium or large size repeated values across many sets and you need super efficient space savings combined with fast set intersections.qnset
stores integer values in native binary format within range [-9671406556917033397649407, 19342813113834066795298815]
.qnset
supports the smallest integer storage possible for sets with large value distributions as well as supporting fast numeric intersection capabilities for large sets.
admin tls reload
admin shutdown
— clean shutdown — listening ports are closed but current in-flight requests run to completion.admin shutdown fast
— instant shutdown — stop the server without regard for clients or state or consistency.SIGTERM
to the Carrier DB parent process
Feature | Notes | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
legacy memcached protocol |
enable by adding For server setup, see: Carrier Cache Tech Specs. |
||||||||||||||||||||||||||
legacy redis protocol |
enable by adding For server setup, see: Carrier Cache Tech Specs. |
||||||||||||||||||||||||||
Full JSON Output For All Commands |
enable for all clients by adding or enable per-connection by running command you can return to legacy redis protocol by running Carrier DB JSON output is available in all legacy redis clients with no changes necessary since the JSON output is returned as legacy redis protocol strings. |
||||||||||||||||||||||||||
legacy redis protocol [namespaces] Note: namespaces are unique to Carrier DB and have no legacy redis equivalent. |
| ||||||||||||||||||||||||||
legacy redis protocol [sets] |
|
||||||||||||||||||||||||||
legacy redis protocol [string] |
| ||||||||||||||||||||||||||
legacy redis protocol [list] |
| ||||||||||||||||||||||||||
legacy redis protocol [hyperloglog] |
| ||||||||||||||||||||||||||
legacy redis protocol [hash, dict, map] Note: redis hash commands are just protocol adapters. All maps in Carrier DB are fully formed namespaces supporting nested types. |
| ||||||||||||||||||||||||||
legacy redis protocol [server / admin] |
|
Here at End Of The Page, we want to thank you for reading our page.
If you have any questions about Carrier DB, let us know and we can make the world a little bit better one program at a time.
For updates about new Carrier DB features and releases, email us or something?
This is the official site for all Carrier DB updates, releases, and feature notes. Check back often.
YOU CONSENT TO THE PLACEMENT OF COOKIES ON ANY SURFACE NEAR YOU FOR THE PURPOSE OF EASILY CONDUCTING CONSUMPTION OF AFOREMENTIONED COOKIES
NO WARRANTY WHATSOEVER, EXPRESS, STATUTORY, OR IMPLIED EXCEPT FOR AN EVERLASTING GUARANTEE OF BIG DATABASE ENERGY