Upload
typicaljoe
View
6.723
Download
0
Embed Size (px)
Citation preview
Better Data Management with TaffyDB
taffydb.com
Who here considered
themselves a JavaScript Programmer 5 years ago?
Three Types of JavaScript Developer
Three Types of JavaScript Developer
Three Types of JavaScript Developer
Three Types of JavaScript Developer
Three Types of JavaScript Developer
Three Types of JavaScript Developer
It all started with arrays
It all started with arrays
var todos = [ ["Home To Dos",1,false,[ ["Replace light bulbs",false,"Ian"], ["Clean out desk",false,"Ian"]] ], ["Work To Dos",0,true,[ ["Fix bug with form",false,"Ian"], ["Draft requirements doc",false,"Ian"], ["Learn JavaScript Objects",false,"Ian"]] ]];
It all started with arrays
var todos = [ ["Home To Dos",1,false,[ ["Replace light bulbs",false,"Ian"], ["Clean out desk",false,"Ian"]] ], ["Work To Dos",0,true,[ ["Fix bug with form",false,"Ian"], ["Draft requirements doc",false,"Ian"], ["Learn JavaScript Objects",false,"Ian"]] ]];// update Fix bug with form to completetodos[1][3][0][1] = true;
Functions like this
function checkTask (list,task) { for(var li = 0;li<todos;li++) { if (todos[li][0] == list) { for (var ta = 0; ta < todos[li][3]; ta++) { if (todos[li][3][ta][0] == task) { todos[li][3][ta][1] == true; } } } }}checkTask("Work To Dos","Draft requirements doc");
JavaScript Object Literals
{}
JavaScript Object Literals
Useful for storing related name value pairs:
{country:"United States", government:"Democracy", president:"Barrak Obama"}
JavaScript Object Literals
Useful for storing related name value pairs:
{country:"United States", government:"Democracy", president:"Barrak Obama"}
Also useful for composing instructions for functions:
find({government:"Democracy"})// find all records where government == Democracy
This is TaffyDB
This is TaffyDB
• A wrapper for object literals (records)
This is TaffyDB
• A wrapper for object literals (records) • Provides a JavaScript centric API (using arrays/objects)
This is TaffyDB
• A wrapper for object literals (records) • Provides a JavaScript centric API (using arrays/objects)• Uses familiar database concepts
This is TaffyDB
• A wrapper for object literals (records) • Provides a JavaScript centric API (using arrays/objects)• Uses familiar database concepts • But it isn't a DB - no persistence
This is TaffyDB
• A wrapper for object literals (records) • Provides a JavaScript centric API (using arrays/objects)• Uses familiar database concepts • But it isn't a DB - no persistence
• Thin (under 12K)• Opensource and Free• Maintained (v1.7.1)• One global object, no prototype modification
Create a data collection
// create a populated data collectionvar jsConfSpeakers = TAFFY([ {"name":"John Resig","topic":"Surprise!"}, {"name":"Francisco Tolmask","topic":"Objective-J"}, {"name":"Chris Anderson","topic":"CouchDB"}, {"name":"Jeff Haynie","topic":"Web Apps on the Desktop"}, {"name":"Stoyan Stefanov","topic":"Kick Ass Web Apps"}]);
Insert
jsConfSpeakers.insert( {"name":"Richard D. Worth","topic":"jQuery UI"} );
Getting records
jsConfSpeakers.first();// returns {"name":"John Resig","topic":"Surprise!"}
Getting records
jsConfSpeakers.first();// returns {"name":"John Resig","topic":"Surprise!"}// TaffyDB filtering is overloaded// 0 and [0] will both return the first record jsConfSpeakers.get(0); jsConfSpeakers.get([0]); // returns [{"name":"John Resig","topic":"Surprise!"}]
Remove
// delete is a reserved word// use remove function instead jsConfSpeakers.remove(0);
Update
jsConfSpeakers.update({"topic":"TBD"},0); // updates the first record, sets topic = "TBD"
Advanced filtering
// Use Object Literals to construct "where clauses" jsConfSpeakers.find({name:"Chris Anderson"});// returns [2]
Advanced filtering
// Use Object Literals to construct "where clauses" jsConfSpeakers.find({name:"Chris Anderson"});// returns [2]jsConfSpeakers.find({topic:{like:"Web Apps"}});// returns [3,4]
Advanced filtering
// Use Object Literals to construct "where clauses" jsConfSpeakers.find({name:"Chris Anderson"});// returns [2]jsConfSpeakers.find({topic:{like:"Web Apps"}});// returns [3,4]
jsConfSpeakers.find({ topic:{like:"Web Apps"}, name:{like:"Jeff"}});// returns [3]// "where topic like Web Apps and name like Jeff"
Let's see it in action...
.forEach() in details
collection.forEach( function (r,index) { //whatever logic here },[optional filter]);
.forEach() in details
collection.forEach( function (r,index) { //whatever logic here },[optional filter]);
// modify r and return it to update the recordcollection.forEach( function (r,index) { r.field = "new value"; return r; });
TaffyDB is Batteries Included
TaffyDB is Batteries Included
Events:• onUpdate, onInsert, onRemove
TaffyDB is Batteries Included
Events:• onUpdate, onInsert, onRemove
JSON Support
TaffyDB is Batteries Included
Events:• onUpdate, onInsert, onRemove
JSON Support typeOf() methods
TaffyDB is Batteries Included
Events:• onUpdate, onInsert, onRemove
JSON Support typeOf() methods Object Methods• isSameObject, mergeObject, etc
TaffyDB is Batteries Included
Events:• onUpdate, onInsert, onRemove
JSON Support typeOf() methods Object Methods• isSameObject, mergeObject, etc
Utility Methods
Does it scale?
Sites Using TaffyDB
Joe's Goals (joesgoals.com)
QuoteWizard (quotewizard.com)
VitaList (vitalist.com)
MostRecent (mostrecent.net)
http://taffydb.com
Learn - Download - Find Help Contribute Code