Developing ii   advanced document design
 

Like this? Share it with your network

Share

Developing ii advanced document design

on

  • 756 views

 

Statistics

Views

Total Views
756
Views on SlideShare
756
Embed Views
0

Actions

Likes
0
Downloads
7
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Developing ii advanced document design Presentation Transcript

  • 1. Advanced Document Design Matt Ingenthron matt@couchbase.com @ingenthr
  • 2. ● Heading up Developer Solutions ● Make sure you guys have the right bits ● Have touched pretty much every component in the system● Long involved in distributed systems ● Worked with Hadoop before it was popular ● Came across memcached, participated/lead in hackathons-- initially lead by Facebook ● Worked on the Java client● Joined Membase in the very early days ● 3rd person aboard
  • 3. Agenda● Document Databases ● Schema-less Data Modeling ● Inherent Constraints● Document Design Basics ● living in the world of Documents● Getting at your Documents (with Demos!) ● Document Editing Demo ● Creating Views and Indexes ● Querying those Indexes ● Reducing the output to values● Questions
  • 4. Document DatabasesDocument Document DesignDatabases Basics Creating Demonstration Summary Views of View Editing
  • 5. Schema-less Data Modeling● ad hoc data store ● No ALTER TABLE ● Add new "fields" to any object any time ● improves development speed● Structure matters at query time, not write time● JSON data is interoperable ● 2.0 Features ● dynamic queries with views ● “Web-native” format ● broad language support: json.org
  • 6. Inherent Constraints● Document ID is the only (DB-side) way to enforce uniqueness● JSON doc key name restrictions ● top-level keys may not begin with either “_” or “$”● Small “gotchas” ● watch out for numbers as strings (Reduce will care) ● data format consistency ● unix time stamps ● some other JS parse-able, IETF codified format
  • 7. Document Design BasicsDocument Document DesignDatabases Basics Creating Demonstration Summary Views of View Editing
  • 8. Beer Document type name in ID{   "_id": "beer_1554_Enlightened_Black_Ale",   "brewery": "New Belgium Brewing",used to reference   "name": "1554 Enlightened Black Ale", brewery doc the   "abv": "5.5", in MapReduce   "description": "Born of a flood...",   "category": "Belgian and French Ale",   "style": "Other Belgian-Style Ales",   "updated": "2010-07-22 20:00:20"} “vintage” date from an SQL dump >_<
  • 9. Brewery Document type name in ID{"_id": "brewery_New_Belgium_Brewing",   "name": "New Belgium Brewing",   "address": ["500 Linden Street"], JSON array   "city": "Fort Collins",   "state": "Colorado",   "code": "80524",   "website": "http://www.newbelgium.com/",   "description": "Well set the scene...”,   "geo": { GeoCouch FTW!       "loc": ["-105.07", "40.5929"],       "accuracy": "RANGE_INTERPOLATED"   },   "updated": "2010-07-22 20:00:20"}
  • 10. Beernique Demo
  • 11. Creating Views Couchbase Server 2.0: Querying and Aggregation with ViewsDocument Document DesignDatabases Basics Creating Demonstration Summary Views of View Editing
  • 12. Document Editing Demo
  • 13. Couchbase Server 2.0:Querying and Aggregation with Views
  • 14. MapReduce Basics● Building indexes, not querying ● Eventually Consistent indexed view ● “Secondary Index”● Output keys are used to reference ranges of the index● Document IDs can also be used for referencing● “Querying” is done via the Query String ● the SDKs wrap this up for you● Values can be anything● Reduce is an additional layer
  • 15. Map function to build the Index of Breweries andtheir Beers_design/beers/_view/brewery_beersfunction(doc) { if (doc.geo) { emit([humanize(doc._id)], 1); } else if (doc.brewery && typeof doc.brewery === string) { emit([doc.brewery, humanize(doc._id)], 1); } // handy function for building IDs from names function humanize(name) { return name.replace(/^(brewery_|beer_)/, ) .replace(/_/g, ); }}
  • 16. Built-in Reduce function for the Brewery andtheir Beers_design/beers/_view/brewery_beers?reduce=true_count• Built-in reducers are the fastest option for Index reduction• _count• _sum• _stats (min, max, count, avg)
  • 17. View EditingDocument Document DesignDatabases Basics Creating Demonstration Summary Views of View Editing
  • 18. Views Editing Demo
  • 19. Results from the brewery_beers index_design/beers/_view/brewery_beers{"rows": [ {"id": "brewery_Abhi_Brewery", "key": ["Abhi Brewery"], "value": 1 }, {"id": "beer_Abhi_beer", "key": ["Abhi Brewery","Abhi beer"], "value": 1 }]}
  • 20. Wait...wheres the data? Meet ?include_docs=true
  • 21. Results from the brewery_beers index_design/beers/_view/brewery_beers?include_docs=true{"rows": [ {"id": "brewery_Abhi_Brewery", "key": ["Abhi Brewery"], "value": 1, "doc": { "_id": "brewery_Abhi_Brewery", "name": "Abhi Brewery", .... } }, {"id": "beer_Abhi_beer", "key": ["Abhi Brewery","Abhi beer"], "value": 1, "doc": { "_id": "beer_Abhi_beer", "name": "Abhi beer", ....} }]}
  • 22. Results from the brewery_beers index_design/beers/_view/brewery_beers?startkey=["NewBelgium Brewing"]&endkey=["New Belgium Brewing", {}]{"rows": [ {"id": "brewery_New_Belgium_Brewing", "key": ["New Belgium Brewing"], "value": 1, "doc": { "_id": "brewery_New_Belgium_Brewing", "name": "New Belgium Brewing", .... } }, {"id": "beer_Fat_Tire_Amber_Ale", "key": ["New Belgium Brewing", "Fat Tire Amber Ale"], "value": 1, "doc": { "_id": "beer_Fat_Tire_Amber_Ale", "name": "Fat Tire Amber Ale", ....} } ]}
  • 23. Number of Beers per Brewery usingReduce_design/beers/_view/brewery_beers?group_level=1{"rows": [ {"id": "brewery_New_Belgium_Brewing", "key": ["New Belgium Brewing"], "value": 9, {"id": "brewery_Other_Brewery", "key": ["Other Brewery"], "value": 3]}• Values are the full count of docs beginning in this range • subtract one (in this case) to find the # of beer docs
  • 24. Creating Views Couchbase Server 2.0: Querying and Aggregation with ViewsDocument Document DesignDatabases Basics Creating Demonstration Summary Views of View Editing
  • 25. Summary● Schema-less Document Databases● Document Design ● you deal in docs daily● View Index Building ● schema on the "way out"
  • 26. Questions?
  • 27. Thanks! Matt Ingenthronmatt@couchbase.com @ingenthr