Name | HBase | Memcached | MongoDB | Redis | Solr |
|
Description | Wide-column store based on Apache Hadoop and on concepts of BigTable | In-memory key-value store, originally intended for caching | One of the most popular document stores | In-memory database with configurable options performance vs. persistency | A widely usedenterprise search engine based onApache Lucene |
|
Developer | Apache Software Foundation | Danga Interactive | MongoDB, Inc | Salvatore Sanfilippo | Apache Software Foundation |
|
Initial release | 2008 | 2003 | 2009 | 2009 | 2004 |
|
License | Open Source | Open Source | Open Source | Open Source | Open Source |
|
Implementation language | Java | C | C++ | C | Java |
|
Server operating systems | Linux | Linux | Linux | Linux | All OS with a Java VM and a servlet container |
|
Unix | Unix |
|
|
|
| OS X |
| OS X |
|
Windows | Windows | Windows | Windows |
|
| FreeBSD | Solaris | BSD |
|
Database model | Wide column store | Key-value store | Document store | Key-value store | Search engine |
|
Data scheme | schema-free | schema-free | schema-free | schema-free | yes |
|
Typing | no | no | yes | no | yes |
|
Secondary indexes | no | no | yes | no | yes |
|
SQL | no | no | no | no | no |
|
APIs and other access methods | Java API | Proprietary protocol | proprietary protocol using JSON | proprietary protocol | Java API |
|
RESTful HTTP API | RESTful HTTP API |
|
Thrift |
|
|
Supported programming languages | C | C | C | C |
|
|
C# | .Net | C# | C# | .Net |
|
C++ | C++ | C++ | C++ |
|
|
Groovy | ColdFusion | Groovy | Clojure |
|
|
Java | Java | Java | Java | Java |
|
| Erlang | Erlang | Erlang | Erlang |
|
Python | Python | Python | Python | Python |
|
Scala | Lua | Scala | Scala | Scala |
|
| Ruby | Ruby | Ruby | Ruby |
|
PHP | PHP | PHP | PHP | PHP |
|
|
| JavaScript | JavaScript | JavaScript |
|
| Perl | Perl | Perl | Perl |
|
| OCaml | Lua | Lua | any language that supports sockets and either XML or JSON |
|
| Lisp | Lisp | Lisp |
|
|
|
| Dart | Dart |
|
|
|
| ColdFusion |
|
|
|
|
| Go | Go |
|
|
|
| Actionscript | Objective-C |
|
|
|
| Haskell | Haskell |
|
|
|
| Smalltalk | Smalltalk |
|
|
|
| Clojure | Tcl |
|
|
|
| MatLab |
|
|
|
|
| PowerShell |
|
|
|
|
| Prolog |
|
|
|
Server-side scripts | yes | no | JavaScript | Lua | Java plugins |
|
Triggers | yes | no | no | no | no |
|
Partitioning methods | Sharding | none | Sharding | none | Sharding |
|
|
Replication methods | selectable replication factor | none | Master-slave replication | Master-slave replication | cloud/distributed (via Zookeeper) |
|
Master-slave replication |
|
MapReduce | yes | no | yes | no | no |
|
Consistency concepts | Immediate Consistency |
| Eventual Consistency |
| Eventual Consistency |
|
Immediate Consistency |
|
Foreign keys | no | no | no | no | no |
|
Transaction concepts | no | no | no | optimistic locking | optimistic locking |
|
|
Concurrency | yes | yes | yes | yes | yes |
|
Durability | yes | no | yes | yes | yes |
|
User concepts | Access Control Lists (ACL) | yes | Users can be defined with full access or read-only access | very simple password-based access control |
|
|
Specific characteristics |
|
|
| Redis very much emphasize performance. In any design decisions performance has priority over features or memory requirements. | Architecture: Lives in web stack, ships by default with Jetty. Connectors, JDBC, multiple languages, true morphological CJK, binary document filters (Tika), Entity Extraction (UIMA) |
|
Typical application scenarios |
| Mostly used for caching |
| Applications that can hold all data in memory, and that have high performance requirements. |
|
|