ted@tedneward.com | Blog: http://blogs.tedneward.com | Twitter: tedneward | Github: tedneward | LinkedIn: tedneward
Why and when should you consider using it?
How do you use it?
"NoSQL" isn't really a great categorization
Very rarely is "not X" a useful descriptor
A better categorization/taxonomy is required
Thus, I choose to eschew "NoSQL" as a useful term
The problem is one of load/scale and contention
Repeat after me: Contention is the enemy of scalability
And scale is the issue of the Internet
With the advent of the Web, we changed our enterprise apps
Before, enterprise apps were internal
Known user base, known loads, known scale
This user base was not likely to change without huge warning
With the Web app, we began to project our enterprise apps out into the Internet
This meant an unknown and unpredictable user base
With that came an unknown and unpredictable load and scale
Scale and load began to take down the existing infrastructure
Traditionally-managed RDBMS'es simply couldn't keep up
ACID has its uses... but we found the edge really quickly
Distributed Two-Phase Commit Transactions
CAP Theorem
Consistency: all database clients see the same data, even with concurrent updates
Availability: all database clients are able to access some version of the data
Partition Tolerance: the database can be split over multiple servers
"Pick two"
RDBMS goes for C + A
Most "NoSQL" databases go for A + P
Data "shapes"
Groupings of relations, tuples, and relvars
If you don't know what these are, you don't know your relational theory
strongly-typed, enforced by the database
Object databases
capturing the object graphs that appear in O-O systems
strongly-typed, defined by an O-O language (not external schema)
Key-value systems
CRUD based solely on the primary key; no joins
weakly- or untyped
Document-oriented
collections of named fields holding data (or more collections)
weakly- or untyped
Data "shapes" (continued)
Graph databases
capturing not just graph structures, but the "arcs" between nodes
graph-based query API/language
Column-oriented/tabular
columns-and-tables, but no relations/relvars
Hierarchical databases
generally, these are XML stores
Hybrids of the above
Firebase (https://firebase.google.com) is...
cloud-hosted (part of Google Cloud Platform)
NoSQL (document-oriented, JSON) database
sync across connected devices in milliseconds ("real-time")
available offline
Firebase has also become...
authentication platform
cloud messaging system
static HTTP hosting
crash reporting
notifications
test lab
bulk-binary (file) storage
Who is this guy?
Architect, Engineering Manager/Leader, "force multiplier"
Co-founder, Solidify US
http://www.solidify.dev
Principal -- Neward & Associates
Author
Professional F# 2.0 (w/Erickson, et al; Wrox, 2010)
Effective Enterprise Java (Addison-Wesley, 2004)
SSCLI Essentials (w/Stutz, et al; OReilly, 2003)
Server-Based Java Programming (Manning, 2000)
See http://www.newardassociates.com