{"id":42,"date":"2014-09-24T08:06:00","date_gmt":"2014-09-24T08:06:00","guid":{"rendered":"http:\/\/www.asianux.org.vn\/index.php\/2014\/09\/24\/cassandra-vs-mongodb-vs-couchdb-vs-redis-vs-riak-vs-hbase-vs-couchbase-vs-orientdb-vs-aerospike-vs-neo4j-vs-hypertable-vs-elasticsearch-vs-accumulo-vs-voltdb-vs-scalaris-comparison\/"},"modified":"2014-09-24T08:06:00","modified_gmt":"2014-09-24T08:06:00","slug":"cassandra-vs-mongodb-vs-couchdb-vs-redis-vs-riak-vs-hbase-vs-couchbase-vs-orientdb-vs-aerospike-vs-neo4j-vs-hypertable-vs-elasticsearch-vs-accumulo-vs-voltdb-vs-scalaris-comparison","status":"publish","type":"post","link":"https:\/\/www.asianux.org.vn\/index.php\/2014\/09\/24\/cassandra-vs-mongodb-vs-couchdb-vs-redis-vs-riak-vs-hbase-vs-couchbase-vs-orientdb-vs-aerospike-vs-neo4j-vs-hypertable-vs-elasticsearch-vs-accumulo-vs-voltdb-vs-scalaris-comparison\/","title":{"rendered":"Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs OrientDB vs Aerospike vs Neo4j vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparison"},"content":{"rendered":"<p>(Yes it&#8217;s a long title, since people kept asking me to write about this and that too \ud83d\ude42 I do when it has a point.)    <br \/>While SQL databases are insanely useful tools, their monopoly in the last decades is coming to an end. And it&#8217;s just time: I can&#8217;t even count the things that were forced into relational databases, but never really fitted them. (That being said, relational databases will always be the best for the stuff that has <i>relations<\/i>.)   <br \/>But, the differences between NoSQL databases are much bigger than ever was between one SQL database and another. This means that it is a bigger responsibility on <a href=\"http:\/\/kkovacs.eu\/resume\" target=\"_blank\" rel=\"noopener\">software architects<\/a>to choose the appropriate one for a project right at the beginning.  <br \/>In this light, here is a comparison of <a href=\"http:\/\/cassandra.apache.org\/\" target=\"_blank\" rel=\"noopener\">Cassandra<\/a>, <a href=\"http:\/\/www.mongodb.org\/\" target=\"_blank\" rel=\"noopener\">Mongodb<\/a>, <a href=\"http:\/\/couchdb.apache.org\/\" target=\"_blank\" rel=\"noopener\">CouchDB<\/a>, <a href=\"http:\/\/redis.io\/\" target=\"_blank\" rel=\"noopener\">Redis<\/a>, <a href=\"http:\/\/basho.com\/riak\/\" target=\"_blank\" rel=\"noopener\">Riak<\/a>, <a href=\"http:\/\/www.couchbase.org\/membase\" target=\"_blank\" rel=\"noopener\">Couchbase (ex-Membase)<\/a>, <a href=\"http:\/\/hypertable.org\/\" target=\"_blank\" rel=\"noopener\">Hypertable<\/a>, <a href=\"http:\/\/www.elasticsearch.org\/\" target=\"_blank\" rel=\"noopener\">ElasticSearch<\/a>, <a href=\"http:\/\/accumulo.apache.org\/\" target=\"_blank\" rel=\"noopener\">Accumulo<\/a>, <a href=\"http:\/\/voltdb.com\/\" target=\"_blank\" rel=\"noopener\">VoltDB<\/a>, <a href=\"http:\/\/fallabs.com\/kyototycoon\/\" target=\"_blank\" rel=\"noopener\">Kyoto Tycoon<\/a>, <a href=\"https:\/\/code.google.com\/p\/scalaris\/\" target=\"_blank\" rel=\"noopener\">Scalaris<\/a>, <a href=\"http:\/\/www.orientechnologies.com\/\" target=\"_blank\" rel=\"noopener\">OrientDB<\/a>, <a href=\"http:\/\/www.aerospike.com\/\" target=\"_blank\" rel=\"noopener\">Aerospike<\/a>, <a href=\"http:\/\/neo4j.org\/\" target=\"_blank\" rel=\"noopener\">Neo4j<\/a> and <a href=\"http:\/\/hbase.apache.org\/\" target=\"_blank\" rel=\"noopener\">HBase<\/a>:  <\/p>\n<h3>The most popular ones<\/h3>\n<div>\n<h2>Redis (V2.8)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> C  <\/li>\n<li><strong>Main point:<\/strong> Blazing fast  <\/li>\n<li><strong>License:<\/strong> BSD  <\/li>\n<li><strong>Protocol:<\/strong> Telnet-like, binary safe  <\/li>\n<li>Disk-backed in-memory database,  <\/li>\n<li>Dataset size limited to computer RAM (but can span multiple machines&#8217; RAM with clustering)  <\/li>\n<li>Master-slave replication, automatic failover  <\/li>\n<li>Simple values or data structures by keys  <\/li>\n<li>but <a href=\"http:\/\/redis.io\/commands\" target=\"_blank\" rel=\"noopener\">complex operations<\/a> like ZREVRANGEBYSCORE.  <\/li>\n<li>INCR &amp; co (good for rate limiting or statistics)  <\/li>\n<li>Bit operations (for example to implement bloom filters)  <\/li>\n<li>Has sets (also union\/diff\/inter)  <\/li>\n<li>Has lists (also a queue; blocking pop)  <\/li>\n<li>Has hashes (objects of multiple fields)  <\/li>\n<li>Sorted sets (high score table, good for range queries)  <\/li>\n<li>Lua scripting capabilities (!)  <\/li>\n<li>Has transactions (!)  <\/li>\n<li>Values can be set to expire (as in a cache)  <\/li>\n<li>Pub\/Sub lets one implement messaging  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> For rapidly changing data with a foreseeable database size (should fit mostly in memory).  <br \/><strong>For example:<\/strong> To store real-time stock prices. Real-time analytics. Leaderboards.  Real-time communication. And wherever you used memcached before.   <\/p>\n<h2>Cassandra (2.0)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java  <\/li>\n<li><strong>Main point:<\/strong> Store <i>huge<\/i> datasets in &#8220;almost&#8221; SQL  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> CQL3 &amp; Thrift  <\/li>\n<li>CQL3 is very similar SQL, but with some limitations that come  from the scalability (most notably: no JOINs, no aggregate functions.)  <\/li>\n<li>CQL3 is now the official interface. Don&#8217;t look at Thrift,  unless you&#8217;re working on a legacy app. This way, you can live without  understanding ColumnFamilies, SuperColumns, etc.  <\/li>\n<li>Querying by key, or key range (secondary indices are also available)  <\/li>\n<li>Tunable trade-offs for distribution and replication (N,&nbsp;R,&nbsp;W)  <\/li>\n<li>Data can have expiration (set on INSERT).  <\/li>\n<li>Writes can be much faster than reads (when reads are disk-bound)  <\/li>\n<li>Map\/reduce possible with Apache Hadoop  <\/li>\n<li>All nodes are similar, as opposed to Hadoop\/HBase  <\/li>\n<li>Very good and reliable cross-datacenter replication  <\/li>\n<li>Distributed counter datatype.  <\/li>\n<li>You can write triggers in Java.  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> When you need to store data so huge that it doesn&#8217;t fit on server, but still want a friendly familiar interface to it.  <br \/><strong>For example:<\/strong> Web analytics, to count hits by hour, by browser, by IP, etc. Transaction logging. Data collection from huge sensor arrays. <\/div>\n<div>\n<h2>MongoDB (2.2)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> C++  <\/li>\n<li><strong>Main point:<\/strong> Retains some friendly properties of SQL. (Query, index)  <\/li>\n<li><strong>License:<\/strong> AGPL (Drivers: Apache)  <\/li>\n<li><strong>Protocol:<\/strong> Custom, binary (BSON)  <\/li>\n<li>Master\/slave replication (auto failover with replica sets)  <\/li>\n<li>Sharding built-in  <\/li>\n<li>Queries are javascript expressions  <\/li>\n<li>Run arbitrary javascript functions server-side  <\/li>\n<li>Better update-in-place than CouchDB  <\/li>\n<li>Uses memory mapped files for data storage  <\/li>\n<li>Performance over features  <\/li>\n<li>Journaling (with &#8211;journal) is best turned on  <\/li>\n<li>On 32bit systems, limited to ~2.5Gb   <\/li>\n<li>An empty database takes up 192Mb  <\/li>\n<li>GridFS to store big data + metadata (not actually an FS)  <\/li>\n<li>Has geospatial indexing  <\/li>\n<li>Data center aware  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> If you need dynamic queries. If you prefer to define indexes, not  map\/reduce functions. If you need good performance on a big DB. If you  wanted CouchDB, but your data changes too much, filling up disks.  <br \/><strong>For example:<\/strong> For most things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back.   <\/p>\n<h2>ElasticSearch (0.20.1)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java  <\/li>\n<li><strong>Main point:<\/strong> Advanced Search  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> JSON over HTTP (Plugins: Thrift, memcached)  <\/li>\n<li>Stores JSON documents  <\/li>\n<li>Has versioning  <\/li>\n<li>Parent and children documents  <\/li>\n<li>Documents can time out  <\/li>\n<li>Very versatile and sophisticated querying, scriptable  <\/li>\n<li>Write consistency: one, quorum or all  <\/li>\n<li>Sorting by score (!)  <\/li>\n<li>Geo distance sorting  <\/li>\n<li>Fuzzy searches (approximate date, etc) (!)  <\/li>\n<li>Asynchronous replication  <\/li>\n<li>Atomic, scripted updates (good for counters, etc)  <\/li>\n<li>Can maintain automatic &#8220;stats groups&#8221; (good for debugging)  <\/li>\n<li>Still depends very much on only one developer (kimchy).  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> When you have objects with (flexible) fields, and you need &#8220;advanced search&#8221; functionality.  <br \/><strong>For example:<\/strong> A dating service that handles age difference, geographic location,  tastes and dislikes, etc. Or a leaderboard system that depends on many  variables. <\/div>\n<h3>Classic document and BigTable stores<\/h3>\n<div>\n<h2>CouchDB (V1.2)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Erlang  <\/li>\n<li><strong>Main point:<\/strong> DB consistency, ease of use  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> HTTP\/REST  <\/li>\n<li>Bi-directional (!) replication,  <\/li>\n<li>continuous or ad-hoc,  <\/li>\n<li>with conflict detection,  <\/li>\n<li>thus, master-master replication. (!)  <\/li>\n<li>MVCC &#8211; write operations do not block reads  <\/li>\n<li>Previous versions of documents are available  <\/li>\n<li>Crash-only (reliable) design  <\/li>\n<li>Needs compacting from time to time  <\/li>\n<li>Views: embedded map\/reduce  <\/li>\n<li>Formatting views: lists &amp; shows  <\/li>\n<li>Server-side document validation possible  <\/li>\n<li>Authentication possible  <\/li>\n<li>Real-time updates via &#8216;_changes&#8217; (!)  <\/li>\n<li>Attachment handling  <\/li>\n<li>thus, <a href=\"http:\/\/couchapp.org\/\" target=\"_blank\" rel=\"noopener\">CouchApps<\/a> (standalone js apps)  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> For accumulating, occasionally changing data, on which pre-defined queries are to be run. Places where versioning is important.  <br \/><strong>For example:<\/strong> CRM, CMS systems. Master-master replication is an especially interestin<br \/>\ng feature, allowing easy multi-site deployments.    <\/p>\n<h2>Accumulo (1.4)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java and C++  <\/li>\n<li><strong>Main point:<\/strong> A BigTable with Cell-level security  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> Thrift  <\/li>\n<li>Another BigTable clone, also runs of top of Hadoop  <\/li>\n<li>Originally from the NSA  <\/li>\n<li>Cell-level security  <\/li>\n<li>Bigger rows than memory are allowed  <\/li>\n<li>Keeps a memory map outside Java, in C++ STL  <\/li>\n<li>Map\/reduce using Hadoop&#8217;s facitlities (ZooKeeper &amp; co)  <\/li>\n<li>Some server-side programming  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> If you need to restict access on the cell level.  <br \/><strong>For example:<\/strong> Same as HBase, since it&#8217;s basically a replacement: Search engines.  Analysing log data. Any place where scanning huge, two-dimensional  join-less tables are a requirement. <\/div>\n<div>\n<h2>HBase (V0.92.0)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java  <\/li>\n<li><strong>Main point:<\/strong> Billions of rows X millions of columns  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> HTTP\/REST (also Thrift)  <\/li>\n<li>Modeled after Google&#8217;s BigTable  <\/li>\n<li>Uses Hadoop&#8217;s HDFS as storage  <\/li>\n<li>Map\/reduce with Hadoop  <\/li>\n<li>Query predicate push down via server side scan and get filters  <\/li>\n<li>Optimizations for real time queries  <\/li>\n<li>A high performance Thrift gateway  <\/li>\n<li>HTTP supports XML, Protobuf, and binary  <\/li>\n<li>Jruby-based (JIRB) shell  <\/li>\n<li>Rolling restart for configuration changes and minor upgrades  <\/li>\n<li>Random access performance is like MySQL  <\/li>\n<li>A cluster consists of several different types of nodes  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> Hadoop is probably still the best way to run Map\/Reduce jobs on huge datasets. Best if you use the Hadoop\/HDFS stack already.  <br \/><strong>For example:<\/strong> Search engines. Analysing log data. Any place where scanning huge, two-dimensional join-less tables are a requirement.   <\/p>\n<h2>Hypertable (0.9.6.5)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> C++  <\/li>\n<li><strong>Main point:<\/strong> A faster, smaller HBase  <\/li>\n<li><strong>License:<\/strong> GPL 2.0  <\/li>\n<li><strong>Protocol:<\/strong> Thrift, C++ library, or HQL shell  <\/li>\n<li>Implements Google&#8217;s BigTable design  <\/li>\n<li>Run on Hadoop&#8217;s HDFS  <\/li>\n<li>Uses its own, &#8220;SQL-like&#8221; language, HQL  <\/li>\n<li>Can search by key, by cell, or for values in column families.  <\/li>\n<li>Search can be limited to key\/column ranges.  <\/li>\n<li>Sponsored by Baidu  <\/li>\n<li>Retains the last N historical values  <\/li>\n<li>Tables are in namespaces  <\/li>\n<li>Map\/reduce with Hadoop  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> If you need a better HBase.  <br \/><strong>For example:<\/strong> Same as HBase, since it&#8217;s basically a replacement: Search engines.  Analysing log data. Any place where scanning huge, two-dimensional  join-less tables are a requirement. <\/div>\n<h3>Graph databases<\/h3>\n<div>\n<h2>Neo4j (V1.5M02)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java  <\/li>\n<li><strong>Main point:<\/strong> Graph database &#8211; connected data  <\/li>\n<li><strong>License:<\/strong> GPL, some features AGPL\/commercial  <\/li>\n<li><strong>Protocol:<\/strong> HTTP\/REST (or embedding in Java)  <\/li>\n<li>Standalone, or embeddable into Java applications  <\/li>\n<li>Full ACID conformity (including durable data)  <\/li>\n<li>Both nodes and relationships can have metadata  <\/li>\n<li>Integrated pattern-matching-based query language (&#8220;Cypher&#8221;)  <\/li>\n<li>Also the &#8220;Gremlin&#8221; graph traversal language can be used  <\/li>\n<li>Indexing of nodes and relationships  <\/li>\n<li>Nice self-contained web admin  <\/li>\n<li>Advanced path-finding with multiple algorithms  <\/li>\n<li>Indexing of keys and relationships  <\/li>\n<li>Optimized for reads  <\/li>\n<li>Has transactions (in the Java API)  <\/li>\n<li>Scriptable in Groovy  <\/li>\n<li>Clustering, caching, online backup, advanced monitoring and High Availability is AGPL\/commercial licensed  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> For graph-style, rich or complex, interconnected data.  <br \/><strong>For example:<\/strong> For searching routes in social relations, public transport links, road maps, or network topologies. <\/div>\n<div>\n<h2>OrientDB (2.0)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java  <\/li>\n<li><strong>Main point:<\/strong> Document-based graph database  <\/li>\n<li><strong>License:<\/strong> Apache 2.0  <\/li>\n<li><strong>Protocol:<\/strong> Java API, binary or HTTP REST\/JSON  <\/li>\n<li>Has transactions  <\/li>\n<li>Can be used both as a document and as a graph database (vertices with properties)  <\/li>\n<li>Multi-master architecture  <\/li>\n<li>Supports relationships between documents via persistent pointers (LINK, LINKSET, LINKMAP, LINKLIST field types)  <\/li>\n<li>SQL-like query language (Note: no JOIN, but there are pointers)  <\/li>\n<li>Web-based GUI (quite good-looking)  <\/li>\n<li>Inheritance between classes  <\/li>\n<li>User functions in SQL or JavaScript  <\/li>\n<li>Sharding  <\/li>\n<li>Advanced monitoring, online backups are commercially licensed  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> For graph-style, rich or complex, interconnected data.  <br \/><strong>For example:<\/strong> For searching routes in social relations, public transport links, road maps, or network topologies.  <\/div>\n<h3>The &#8220;long tail&#8221;<br \/>(Not widely known, but definitely worthy ones)<\/h3>\n<div>\n<h2>Couchbase (ex-Membase) (2.0)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Erlang &amp; C  <\/li>\n<li><strong>Main point:<\/strong>  Memcache compatible, but with persistence and clustering  <\/li>\n<li><strong>License:<\/strong>  Apache  <\/li>\n<li><strong>Protocol:<\/strong>  memcached + extensions  <\/li>\n<li>Very fast (200k+\/sec) access of data by key  <\/li>\n<li>Persistence to disk  <\/li>\n<li>All nodes are identical (master-master replication)  <\/li>\n<li>Provides memcached-style in-memory caching buckets, too  <\/li>\n<li>Write de-duplication to reduce IO  <\/li>\n<li>Friendly cluster-management web GUI  <\/li>\n<li>Connection proxy for connection pooling and multiplexing (Moxi)  <\/li>\n<li>Incremental map\/reduce  <\/li>\n<li>Cross-datacenter replication  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> Any application where low-latency data access, high concurrency support and high availability is a requirement.  <br \/><strong>For example:<\/strong> Low-latency use-cases like ad targeting or highly-concurrent web apps like online gaming (e.g. Zynga).   <\/p>\n<h2>Scalaris (0.5)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Erlang  <\/li>\n<li><strong>Main point:<\/strong> Distributed P2P key-value store  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> Proprietary &amp; JSON-RPC  <\/li>\n<li>In-memory (disk when using Tokyo Cabinet as a backend)  <\/li>\n<li>Uses YAWS as a web server  <\/li>\n<li>Has transactions (an adapted Paxos commit)  <\/li>\n<li>Consistent, distributed write operations  <\/li>\n<li>From CAP, values Consistency over Availability (in case of network partitioning, only the bigger partition works)  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> If you like Erlang and wanted to use Mnesia or DETS or ETS, but you  need something that is accessible from more languages (and scales much  better than ETS or DETS).  <br \/><strong>For example:<\/strong> In an Erlang-based system when you want to give access to the DB to Python, Ruby or Java programmers.   <\/p>\n<h2>Aerospike (3.3)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> C  <\/li>\n<li><strong>Main point:<\/strong> Speed, SSD-optimized storage  <\/li>\n<li><strong>License:<\/strong> License: AGPL (Client: Apache)  <\/li>\n<li><strong>Protocol:<\/strong> Proprietary  <\/li>\n<li>Cross-datacenter replication is commercially licensed  <\/li>\n<li>Very fast access of data by key  <\/li>\n<li>Uses SSD devices as a block device to store data (RAM + persistence also available)  <\/li>\n<li>Automatic failover and automatic rebalancing of data when nodes or added or removed from cluster  <\/li>\n<li>User Defined Functions in LUA  <\/li>\n<li>Cluster management with Web GUI  <\/li>\n<li>Has complex data types (lists and maps) as well as simple (integer, string, blob)  <\/li>\n<li>Secondary indices  <\/li>\n<li>Aggregation query model  <\/li>\n<li>Data can be set to expire<br \/>\nwith a time-to-live (TTL)  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> Any application where low-latency data access, high concurrency support and high availability is a requirement.  <br \/><strong>For example:<\/strong>Storing massive amounts of profile data in online advertising or retail Web sites.  <\/div>\n<div>\n<h2>Riak (V1.2)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Erlang &amp; C, some JavaScript  <\/li>\n<li><strong>Main point:<\/strong> Fault tolerance  <\/li>\n<li><strong>License:<\/strong> Apache  <\/li>\n<li><strong>Protocol:<\/strong> HTTP\/REST or custom binary  <\/li>\n<li>Stores blobs  <\/li>\n<li>Tunable trade-offs for distribution and replication  <\/li>\n<li>Pre- and post-commit hooks in JavaScript or Erlang, for validation and security.  <\/li>\n<li>Map\/reduce in JavaScript or Erlang  <\/li>\n<li>Links &amp; link walking: use it as a graph database  <\/li>\n<li>Secondary indices: but only one at once  <\/li>\n<li>Large object support (Luwak)  <\/li>\n<li>Comes in &#8220;open source&#8221; and &#8220;enterprise&#8221; editions  <\/li>\n<li>Full-text search, indexing, querying with Riak Search  <\/li>\n<li>In the process of migrating the storing backend from &#8220;Bitcask&#8221; to Google&#8217;s &#8220;LevelDB&#8221;  <\/li>\n<li>Masterless multi-site replication replication and SNMP monitoring are commercially licensed  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> If you want something Dynamo-like data storage, but no way you&#8217;re gonna  deal with the bloat and complexity. If you need very good single-site  scalability, availability and fault-tolerance, but you&#8217;re ready to pay  for multi-site replication.  <br \/><strong>For example:<\/strong> Point-of-sales data collection. Factory control systems. Places where  even seconds of downtime hurt. Could be used as a well-update-able web  server.   <\/p>\n<h2>VoltDB (2.8.4.1)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> Java  <\/li>\n<li><strong>Main point:<\/strong> Fast transactions and rapidly changing data  <\/li>\n<li><strong>License:<\/strong> GPL 3  <\/li>\n<li><strong>Protocol:<\/strong> Proprietary  <\/li>\n<li>In-memory <strong>relational<\/strong> database.  <\/li>\n<li>Can export data into Hadoop  <\/li>\n<li>Supports ANSI SQL  <\/li>\n<li>Stored procedures in Java  <\/li>\n<li>Cross-datacenter replication  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> Where you need to act fast on massive amounts of incoming data.  <br \/><strong>For example:<\/strong> Point-of-sales data analysis. Factory control systems.   <\/p>\n<h2>Kyoto Tycoon (0.9.56)<\/h2>\n<ul>\n<li><strong>Written in:<\/strong> C++  <\/li>\n<li><strong>Main point:<\/strong> A lightweight network DBM  <\/li>\n<li><strong>License:<\/strong> GPL  <\/li>\n<li><strong>Protocol:<\/strong> HTTP (TSV-RPC or REST)  <\/li>\n<li>Based on Kyoto Cabinet, Tokyo Cabinet&#8217;s successor  <\/li>\n<li>Multitudes of storage backends: Hash, Tree, Dir, etc (everything from Kyoto Cabinet)  <\/li>\n<li>Kyoto Cabinet can do 1M+ insert\/select operations per sec (but Tycoon does less because of overhead)  <\/li>\n<li>Lua on the server side  <\/li>\n<li>Language bindings for C, Java, Python, Ruby, Perl, Lua, etc  <\/li>\n<li>Uses the &#8220;visitor&#8221; pattern  <\/li>\n<li>Hot backup, asynchronous replication  <\/li>\n<li>background snapshot of in-memory databases  <\/li>\n<li>Auto expiration (can be used as a cache server)  <\/li>\n<\/ul>\n<p><strong>Best used:<\/strong> When you want to choose the backend storage algorithm engine very precisely. When speed is of the essence.  <br \/><strong>For example:<\/strong> Caching server. Stock prices. Analytics. Real-time data collection.  Real-time communication. And wherever you used memcached before.  <\/div>\n<p>Of course, all these systems have much more features than what&#8217;s  listed here. I only wanted to list the key points that I base my  decisions on. Also, development of all are very fast, so things are  bound to change.  <br \/><a href=\"http:\/\/news.ycombinator.com\/item?id=2052852\" target=\"_blank\" rel=\"noopener\">Discussion on Hacker News<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Yes it&#8217;s a long title, since people kept asking me to write about this and that too \ud83d\ude42 I do when it has a point.) While SQL databases are insanely useful tools, their monopoly in&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-database"],"_links":{"self":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/comments?post=42"}],"version-history":[{"count":0,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/42\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/media?parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/categories?post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/tags?post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}