|
| 1 | +title: NoSQL Data Stores |
| 2 | +category: page |
| 3 | +slug: no-sql-datastore |
| 4 | +sort-order: 0402 |
| 5 | +choice1url: /databases.html |
| 6 | +choice1icon: fa-hdd-o |
| 7 | +choice1text: Tell me more about standard relational databases. |
| 8 | +choice2url: /cascading-style-sheets.html |
| 9 | +choice2icon: fa-css3 fa-inverse |
| 10 | +choice2text: My app is running but looks awful. How do I style the interface? |
| 11 | +choice3url: /javascript.html |
| 12 | +choice3icon: fa-html5 fa-inverse |
| 13 | +choice3text: How do I create a better browser experience with JavaScript? |
| 14 | +choice4url: |
| 15 | +choice4icon: |
| 16 | +choice4text: |
| 17 | + |
| 18 | + |
| 19 | +# NoSQL Data Stores |
| 20 | +Relational databases store the vast majority of web application |
| 21 | +persistent data. However, there are several alternative classifications of |
| 22 | +storage representations. |
| 23 | + |
| 24 | +1. Key-value pair |
| 25 | +2. Document-oriented |
| 26 | +3. Column-family table |
| 27 | +4. Graph |
| 28 | + |
| 29 | +These persistent data storage representations are commonly used to augment, |
| 30 | +rather than completely replace, relational databases. |
| 31 | + |
| 32 | + |
| 33 | +## Key-value Pair |
| 34 | +Key-value pair data stores are based |
| 35 | +on [hash map](http://en.wikipedia.org/wiki/Hash_table) data structures. |
| 36 | + |
| 37 | + |
| 38 | +### Key-value pair data stores |
| 39 | +* [Redis](http://redis.io/) is an open source in-memory key-value pair data |
| 40 | + store. Redis is often called "the Swiss Army Knife of web application |
| 41 | + development." It can be used for caching, queuing, and storing session data |
| 42 | + for faster access than a traditional relational database, among many other |
| 43 | + use cases. |
| 44 | + |
| 45 | + |
| 46 | +### Key-value pair resources |
| 47 | +* "[How To Install and Use Redis](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-redis)" |
| 48 | + is a guide for getting up with the extremely useful in-memory data store. |
| 49 | + |
| 50 | + |
| 51 | +## Document-oriented |
| 52 | +A document-oriented database provides a semi-structured representation for |
| 53 | +nested data. |
| 54 | + |
| 55 | + |
| 56 | +### Document-oriented data stores |
| 57 | +* [MongoDB](http://www.mongodb.org/) is an open source document-oriented |
| 58 | + data store with a Binary Object Notation (BSON) storage format that is |
| 59 | + JSON-style and familiar to web developers. |
| 60 | + |
| 61 | +* [Riak](http://basho.com/riak/) is an open source distributed data store |
| 62 | + focused on availability, fault tolerance and large scale deployments. |
| 63 | + |
| 64 | +* [Apache CouchDB](http://couchdb.apache.org/) is also an open source project |
| 65 | + where the focus is on embracing RESTful-style HTTP access for working with |
| 66 | + stored JSON data. |
| 67 | + |
| 68 | +### Document-oriented data store resources |
| 69 | +* [MongoDB for startups](http://www.optinidus.com/blogs/guide-to-mongodb-for-startups/) |
| 70 | + is a guide about using non-relational databases in green field environments. |
| 71 | + |
| 72 | + |
| 73 | +## Column-family table |
| 74 | +A the column-family table class of NoSQL data stores builds on the key-value |
| 75 | +pair type. Each key-value pair is considered a row in the store while the |
| 76 | +column family is similar to a table in the relational database model. |
| 77 | + |
| 78 | + |
| 79 | +### Column-family table data stores |
| 80 | +* Apache [HBase](https://hbase.apache.org/) |
| 81 | + |
| 82 | +* Apache [Cassandra](http://cassandra.apache.org/) |
| 83 | + |
| 84 | + |
| 85 | +## Graph |
| 86 | +A graph database represents and stores data in three aspects: nodes, edges, |
| 87 | +and properties. |
| 88 | + |
| 89 | +A *node* is an entity, such as a person or business. |
| 90 | + |
| 91 | +An *edge* is the relationship between two entities. For example, an |
| 92 | +edge could represent that a node for a person entity is an employee of a |
| 93 | +business entity. |
| 94 | + |
| 95 | +A *property* represents information about nodes. For example, an entity |
| 96 | +representing a person could have a property of "female" or "male". |
| 97 | + |
| 98 | + |
| 99 | +### Graph data stores |
| 100 | +* [Neo4j](http://www.neo4j.org/) is one of the most widely used graph |
| 101 | + databases and runs on the Java Virtual Machine stack. |
| 102 | + |
| 103 | +* [Cayley](https://github.com/google/cayley) is an open source graph data |
| 104 | + store written by Google primarily written in Go. |
| 105 | + |
| 106 | + |
| 107 | +### Graph data store resources |
| 108 | +* [Introduction to Graph Databases](http://www.slideshare.net/maxdemarzi/introduction-to-graph-databases-12735789) |
| 109 | + covers trends in NoSQL data stores and compares graph databases to other |
| 110 | + data store types. |
| 111 | + |
| 112 | + |
| 113 | +## NoSQL third-party services |
| 114 | +* [MongoHQ](http://www.mongohq.com/home) provides MongoDB as a service. It's |
| 115 | + easy to set up with either a standard LAMP stack or on Heroku. |
| 116 | + |
| 117 | + |
| 118 | +## NoSQL data store resources |
| 119 | +* [CAP Theorem overview](http://natishalom.typepad.com/nati_shaloms_blog/2010/10/nocap.html) |
| 120 | + |
| 121 | +* [NoSQL Weekly](http://www.nosqlweekly.com/) is a free curated email |
| 122 | + newsletter that aggregates articles, tutorials, and videos about |
| 123 | + non-relational data stores. |
| 124 | + |
| 125 | +* [NoSQL comparison](http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis) |
| 126 | + is a large list of popular, BigTable-based, special purpose, and other |
| 127 | + datastores with attributes and the best use cases for each one. |
| 128 | + |
| 129 | + |
| 130 | +## NoSQL data stores learning checklist |
| 131 | +<i class="fa fa-check-square-o"></i> |
| 132 | +Understand why NoSQL data stores are better for some use cases than relational |
| 133 | +databases. In general these benefits are only seen at large scale so they may |
| 134 | +not be applicable to your web application. |
| 135 | + |
| 136 | +<i class="fa fa-check-square-o"></i> |
| 137 | +Integrate Redis into your project for a speed boost over slower persistent |
| 138 | +storage. Storing session data in memory is generally much faster than saving |
| 139 | +that data in a traditional relational database that uses persistent storage. |
| 140 | +Note that when memory is flushed the data goes away so anything that needs to |
| 141 | +be persistent must still be backed up to disk on a regular basis. |
| 142 | + |
| 143 | +<i class="fa fa-check-square-o"></i> |
| 144 | +Evaluate other use cases such as storing transient logs in document-oriented |
| 145 | +data stores such as MongoDB. |
| 146 | + |
| 147 | + |
| 148 | +### What's next? |
0 commit comments