Learning CouchDB A Non-Relational Alternative to Data Persistence for Modern Software Applications

Size: px
Start display at page:

Download "Learning CouchDB A Non-Relational Alternative to Data Persistence for Modern Software Applications"

Transcription

1 Learning CouchDB A Non-Relational Alternative to Data Persistence for Modern Software Applications

2 Is CouchDB a good choice for your application?

3 Problem: The Object-Relational Impedance Mismatch [1] How to persist data in an object-oriented software application?

4 Problem: The Object-Relational Impedance Mismatch [1] How to persist data in an object-oriented software application? separate domain and data mapping layers [2] object-relational mapping (ORM) [3] non-relational database

5 Problem: Semi-Structured Data How to persist data with flexible schemas?

6 Problem: Semi-Structured Data How to persist data with flexible schemas? leave non-applicable column values null use the entity-attributevalue (EAV) anti-pattern [1] use a schema-less database with a self-describing structure 1.

7 Problem: Persisting Graph Relationships How to persist graphs, trees and hierarchical data?

8 Problem: Persisting Graph Relationships How to persist graphs, trees and hierarchical data? model hierarchical data in SQL [1] graph database [2] documentoriented database

9 Problem: Achieving High Concurrency How to give up consistency in exchange for high availability? [1] 1.

10 Problem: Achieving High Concurrency How to give up consistency in exchange for high availability? [1] reduce transaction scope database replication denormalization multi-version concurrency control (MVCC) 1.

11 Problem: Building in Fault-Tolerance How to make a fault-tolerant system?

12 Problem: Building in Fault-Tolerance How to make a fault-tolerant system? promote slave database to master on fault isolate faults multi-master replication

13 Problem: Flexible Indexing How to index data other than direct column values?

14 Problem: Flexible Indexing How to index data other than direct column values? denormalize Map/Reduce user-defined types

15 Lesson About CouchDB

16 Schema-Less stores self-contained JSON documents related entities can be stored in a single document only store fields that are needed in each document

17 Futon Web Administration built-in web administration console default location is: create, read, update and delete databases and documents query databases configure CouchDB replicate between databases view task status run test suite set up server admins configure database security run compaction and cleanup maintenance tasks

18 CouchDB Views queries are run against indexed views views are generated through incremental Map functions aggregate results can be retrieved through Reduce functions

19 HTTP API every language and platform has an HTTP client uses existing semantics (e.g. 201 Created, 202 Accepted) distributed, scalable and cacheable

20 CouchDB and PHP can just use an HTTP client several client libraries specific to CouchDB are available

21 Flexible Querying Options all rows in a given view row(s) matching a specified key rows by start and end keys exact grouping group by levels limit and skip parameters output in descending order include original documents in result set

22 Lesson Installation

23 CouchDB or Couchbase CouchDB: project of the Apache Software Foundation available through package managers Couchbase: superset of CouchDB includes geospatial indexing available as Couchbase Mobile for ios and Android commercial support options available

24 CouchDB Installation Mac OS X Homebrew MacPorts Windows binary installer [1] Ubuntu Aptitude Red Hat Yum 1.

25 Couchbase Single Server [1] Available for: Mac OS X Windows Ubuntu Red Hat 1.

26 Lab Install CouchDB or Couchbase

27 Installation and Startup :03 1. Install CouchDB OR Install Couchbase Single Server 2. If CouchDB, then at the command-line: $ sudo couchdb Apache CouchDB has started. Time to relax. 3. Optionally, test CouchDB: $ curl ' {"couchdb":"welcome","version":"1.1.0"}

28 Lesson JSON Documents

29 Why JSON? human-readable and simple data interchange format data structures from many programming languages can be easily converted to and from JSON lightweight doesn t add too much to bandwidth overhead

30 JSON Data Types String Number Boolean (false or true) JSON Array (e.g. ["a", "b", "c"]) JSON Object: collection of name/value pairs where the name is a String and the value is any valid JSON data type JSON NULL (null)

31 Example JSON Object { "_id":" ", "title":"couchdb: The Definitive Guide", "subtitle":"time to Relax", "authors":[ "J. Chris Anderson", "Jan Lehnardt", "Noah Slater" ], "publisher":"o'reilly Media", "released":" ", "pages":272 }

32 Lab Futon

33 Access Futon :01 1. Visit Futon in your web browser: 2. Note the existing _replicator and _users databases 3. Note the Tools navigation section 4. Note the following message: Welcome to Admin Party!

34 Access Futon

35 Create a Database :01 1. Click Create Database 2. Enter books in the Database Name field 3. Click the Create button

36 Create a Database

37 Create a Document :05 1. Click New Document 2. Enter as the value for the _id field, and then click apply 3. Using the Add Field button, add a title field with a value of CouchDB: The Definitive Guide 4. Add a subtitle field with a value of Time to Relax 5. Add an authors field with a value of: ["J. Chris Anderson", "Jan Lehnardt", "Noah Slater"] 6. Add a publisher field with a value of O'Reilly Media 7. Add a released field with a value of Add a pages field with a value of Click Save Document

38 Create a Document

39 Lesson Map Functions

40 Map Functions used to transform documents into key/value pairs user-defined, typically written in JavaScript every document is incrementally passed through this function function is passed a JSON object representing a document function calls an emit function zero, one or more times emit function accepts two arguments: a key a value to be associated with the key an id field is implicitly emitted as well

41 Temporary Views contains a Map function and an optional Reduce function useful in development very slow on large data sets

42 Lab One-To-One Mapping

43 Map Book Titles :03 1. Click on the books database in the breadcrumb navigation 2. Select Temporary view from the View select menu 3. Enter the following in the View Code text area: function(doc) { if (doc.title) { emit(doc.title); } } 4. Click Run

44 Map Book Titles

45 Map functions must be deterministic. Given the same input, a Map function must always return the same output.

46 Add a Second Document :05 1. Click New Document 2. Enter as the value for the _id field, and then click apply 3. Add a title field with a value of RESTful Web Services 4. Add a subtitle field with a value of Web services for the real world 5. Add an authors field with a value of: ["Leonard Richardson", "Sam Ruby"] 6. Add a publisher field with a value of O'Reilly Media 7. Add a released field with a value of Add a pages field with a value of Click Save Document

47 Add a Second Document

48 Map Book Titles :01 1. Click on the books database in the breadcrumb navigation 2. If not already selected, select Temporary view from the View select menu 3. If not already entered, enter the following in the View Code text area: function(doc) { if (doc.title) { emit(doc.title); } } 4. Click Run

49 Map Book Titles

50 Lab One-To-Many Mapping

51 Add a formats Field :03 1. Navigate to the books database, if not already there 2. Select All documents from the View select menu 3. Click the first document, Add a formats field with a value of: ["Print", "Ebook", "Safari Books Online"] 5. Click Save Document 6. Navigate back to the books database 7. Repeat steps 3 through 6 for the second document,

52 When updating documents, you may have noticed the _rev field, an artifact of CouchDB s Multi-Version Concurrency Control (MVCC).

53 Add a Third Document :05 1. Click New Document 2. Enter as the value for the _id field, and then click apply 3. Add a title field with a value of DocBook: The Definitive Guide 4. Add an authors field with a value of: ["Norman Walsh", "Leonard Muellner"] 5. Add a publisher field with a value of O'Reilly Media 6. Add a formats field with a value of: ["Print"] 7. Add a released field with a value of Add a pages field with a value of Click Save Document

54 Add a Third Document

55 Map Book Formats :03 1. Navigate to the books database 2. Select Temporary view from the View select menu 3. Enter the following in the View Code text area: function(doc) { if (doc.formats) { for (var i in doc.formats) { emit(doc.formats[i]); } } } 4. Click Run

56 Map Book Formats

57 Map Book Authors :02 1. Navigate to the books database 2. Select Temporary view from the View select menu 3. Enter the following in the View Code text area: function(doc) { if (doc.authors) { for (var i in doc.authors) { emit(doc.authors[i]); } } } 4. Click Run

58 Map Book Authors

59 Lesson Reduce Functions

60 Reduce Functions optional, run against data set produced by a Map function typically used to reduce a set of values to a single, scalar value can reference built-in Reduce functions custom Reduce functions can be written in JavaScript set of already reduced data may be rereduced function is passed three arguments: keys: array of mapped keys and associated document identifiers in the form of [key, id] values: array of mapped values rereduce: boolean value indicating whether or not the reduce function is being called recursively on its own output (in which case, keys will be null)

61 Built-In Reduce Functions written in CouchDB s native Erlang faster than user-defined JavaScript functions includes: _count _sum _stats

62 If you think that you need to write your own custom Reduce function, you re probably doing it wrong.

63 Grouping values can be reduced by group grouping is controlled by a query, not by the Reduce function grouping is done by key key levels, or parts of a key, can also be grouped on

64 Lab Built-In Reduce Functions

65 The built-in _count function can reduce arbitrary values, including null values.

66 Count: No Grouping :03 1. Select Temporary view from the View select menu 2. Enter the following in the View Code text area: function(doc) { if (doc.formats) { for (var i in doc.formats) { emit(doc.formats[i]); } } } 3. Enter the following in the Reduce Function text area: _count 4. Click Run 5. Check the Reduce checkbox 6. Select none from the Grouping select menu

67 Count: No Grouping

68 Count: Exact Grouping :01 1. Select exact from the Grouping select menu

69 Count: Exact Grouping

70 The _sum and _stats functions will only reduce sets of numbers.

71 Sum: Exact Grouping :02 1. Update the View Code text area with the following: function(doc) { if (doc.formats) { for (var i in doc.formats) { emit(doc.formats[i], doc.pages); } } } 2. Enter the following in the Reduce Function text area: _sum 3. Click Run 4. The Reduce checkbox should be checked 5. exact should be selected from the Grouping select menu

72 Sum: Exact Grouping

73 Stats: Exact Grouping :01 1. Enter the following in the Reduce Function text area: _stats 2. Click Run 3. The Reduce checkbox should be checked 4. exact should be selected from the Grouping select menu

74 Stats: Exact Grouping

75 Map/Reduce gives you tremendous flexibility, but has its limitations: no ad-hoc queries * index is one dimensional only key or range queries are allowed * Temporary views are only useful in development, not in production. Multiple key queries are allowed, but result in multiple hits on the index.

76 Lesson Design Documents

77 Non-Temporary Views multiple views can be defined within a design document a view contains a Map and an optional Reduce function a view is recomputed when its design document is updated views are incrementally re-indexed after documents are created, updated or deleted * * Technically, views are incrementally re-indexed when queried.

78 Contents of a Design Document view definitions Map functions Reduce functions show functions list functions document update handlers document update validation functions rewrite definitions arbitrary fields arbitrary attachments

79 Lab Design Documents

80 Titles View :05 1. Update the View Code text area with the following: function(doc) { if (doc.title) { emit(doc.title, doc.pages); } } 2. Enter the following in the Reduce Function text area: _stats 3. Click Save As 4. Enter default as the Design Document name 5. Enter titles as the View Name 6. Click Save

81 Titles View

82 Query Titles View :01 1. Select titles from the View select menu, if not already selected 2. Click arrow next to View Code, if you d like 3. Check the Reduce checkbox, if not already checked 4. Select none from the Grouping select menu

83 Query Titles View

84 Formats View :05 1. Update the View Code text area with the following: function(doc) { if (doc.formats) { for (var i in doc.formats) { emit(doc.formats[i], doc.pages); } } } 2. Enter the following in the Reduce Function text area: _stats 3. Click Save As 4. Enter default as the Design Document name 5. Enter formats as the View Name 6. Click Save

85 Formats View

86 Query Formats View :01 1. Select formats from the View select menu, if not already selected 2. Click the arrow next to View Code, if you d like 3. Check the Reduce checkbox, if not already checked 4. Select none from the Grouping select menu

87 Query Formats View

88 Authors View :05 1. Update the View Code text area with the following: function(doc) { if (doc.authors) { for (var i in doc.authors) { emit(doc.authors[i], doc.pages); } } } 2. Enter the following in the Reduce Function text area: _stats 3. Click Save As 4. Enter default as the Design Document name 5. Enter authors as the View Name 6. Click Save

89 Authors View

90 Query Authors View :01 1. Select authors from the View select menu, if not already selected 2. Click arrow next to View Code, if you d like 3. Check the Reduce checkbox, if not already checked 4. Select none from the Grouping select menu

91 Query Authors View

92 Views use extra disk space in exchange for additional performance. Consider the design of your views accordingly.

93 Lesson HTTP API

94 Resources URI identifies a resource resource could be a: database document attachment configuration section

95 Methods HTTP methods define actions on resources HTTP methods used in CouchDB include: GET POST PUT DELETE

96 Self-Describing Messages HTTP request headers: Accept Content-Type HTTP response status codes: 200 OK 201 Created 409 Conflict HTTP response headers: Content-Type Etag

97 Conditional caching can be done with the Etag HTTP response header and the If-None-Match HTTP request header.

98 Hypermedia Controls not part of the core API * can be created with a combination of: show functions list functions document update handlers * One might argue that a document identifier could serve as a form of hypermedia control.

99 curl [1] tool for transferring data understands many protocols, including HTTP both a library and a command-line tool 1.

100 Useful curl Switches -d HTTP POST data --data-urlencode HTTP POST data url encoded -G Send the -d data with a HTTP GET -H Custom header to pass to server -i Include protocol headers in the output -X Specify request command to use

101 Lab curl and CouchDB

102 Install curl 1. Install curl command-line tool using your package manager OR Download and install curl executable [1] 2. Test curl and CouchDB: $ curl -ix GET ' HTTP/ OK Server: CouchDB/1.1.0 (Erlang OTP/R14B03) Date: Tue, 11 Oct :21:40 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 40 Cache-Control: must-revalidate {"couchdb":"welcome","version":"1.1.0"} 1.

103 Accept JSON 1. Tell CouchDB that you can accept JSON: $ curl -ix GET ' -H 'Accept: application/json' HTTP/ OK Server: CouchDB/1.1.0 (Erlang OTP/R14B03) Date: Tue, 11 Oct :51:40 GMT Content-Type: application/json Content-Length: 40 Cache-Control: must-revalidate {"couchdb":"welcome","version":"1.1.0"}

104 Create a Database 1. PUT a new database into CouchDB: $ curl -ix PUT ' HTTP/ Created Location: {"ok":true}

105 Create a Document 1. POST a new document into a CouchDB database: $ curl -ix POST ' -H 'Content-Type: application/json' -d '{"_id":"mydoc"}' HTTP/ Created Location: { } "ok":true, "id":"mydoc", "rev":"1-967a00dff5e02add abb3284d"

106 Read the Document 1. GET a document: $ curl -ix GET ' HTTP/ OK Etag: "1-967a00dff5e02add abb3284d" { } "_id":"mydoc", "_rev":"1-967a00dff5e02add abb3284d"

107 Update the Document 1. PUT an updated document: $ curl -ix PUT ' -H 'If-Match: "1-967a00dff5e02add abb3284d"' -H 'Content-Type: application/json' -d '{"title":"learning CouchDB"}' HTTP/ Created Location: Etag: " e3179a22a22e06874c374e8ef0" { } "ok":true, "id":"mydoc", "rev":" e3179a22a22e06874c374e8ef0"

108 Read the Document 1. GET the document again: $ curl -ix GET ' HTTP/ OK Etag: " e3179a22a22e06874c374e8ef0" { } "_id":"mydoc", "_rev":" e3179a22a22e06874c374e8ef0", "title":"learning CouchDB"

109 Delete the Document 1. DELETE the document: $ curl -ix DELETE ' -H 'If-Match: " e3179a22a22e06874c374e8ef0"' HTTP/ OK Etag: "3-e9a5aa1c486eee23c84fa028bc904991" { } "ok":true, "id":"mydoc", "rev":"3-e9a5aa1c486eee23c84fa028bc904991"

110 Delete the Database 1. DELETE the database: $ curl -ix DELETE ' HTTP/ OK {"ok":true}

111 Lesson CouchDB Libraries for PHP

112 HTTP Clients Zend_Http_Client [1] a Zend Framework component relatively easy-to-use API PHP s curl extension [2] commonly installed extension less intuitive API HTTP_Request2 [3] a PEAR component

113 Sag for CouchDB [1] accepts PHP data structures (e.g. objects, strings) can return raw JSON can return a PHP object 1.

114 PHP Object_Freezer [1] created and maintained by Sebastian Bergmann freezes and thaws PHP objects extensible storage options includes CouchDB object storage installable through pear: $ pear channel-discover pear.phpunit.de $ pear install phpunit/object_freezer 1.

115 PHP CouchDB Extension [1] supports a large part of the CouchDB API supports both cookie and basic authentication automatically encodes and decodes JSON to and from PHP objects and arrays available as a PECL extension 1.

116 Doctrine2 CouchDB ODM [1] a mapper between PHP objects and CouchDB documents uses metadata mapping pattern to map documents to plain old PHP objects potentially good fit if you re already using Doctrine 1.

117 Others PHP On Couch [1] Chill [2] Settee [3] PHPillow [4]* *PHPillow does not appear to be maintained.

118 Lesson Querying Views

119 To Reduce or Not To Reduce results will not be reduced if no Reduce function is defined by default, results will be reduced to not reduce, set the reduce parameter to false

120 Key Matching by default, all rows will be returned results can be filtered with a key parameter the key parameter can be set to any valid JSON value valid JSON values include a: String Number Boolean JSON Array JSON Object must be URL encoded in a query string zero, one ore more rows matching the key will be returned

121 Start and End Key Range startkey parameter can define the beginning of a range endkey parameter can define the end of a range startkey and endkey parameters can be any valid JSON value startkey and endkey parameters must be URL encoded startkey_docid parameter further refines the start of a range endkey_docid parameter further refines the end of a range since they reference document identifiers, the startkey_docid and endkey_docid parameters must be strings

122 Limiting, Skipping and Reversing limit parameter specifies a maximum number of rows skip parameter specifies a number of rows to skip over to reverse results, set the descending parameter to true when reversing results, swap your startkey/startkey_docid parameters with your endkey/endkey_docid parameters

123 Grouping to group results by exact key, set the group parameter to true group_level parameter is useful if view s keys are JSON Arrays, otherwise known as compound keys a group_level of 1 will only group on the first items in the arrays, ignoring any subsequent array elements a group_level of 2 will only group on the first and second items in the arrays, ignoring any subsequent array elements a group_level of 3 will only group on the first, second and third items in the arrays, ignoring any subsequent array elements

124 Including Documents original document from which each row was emitted can be included by setting the include_docs parameter to true this will add a doc field to your output rows if the value emitted from the Map function is a JSON Object containing an _id field, then CouchDB will instead include the document with an identifier matching the value of this field

125 Stale Views by default, views are incrementally updated when queried set the stale parameter s value to ok to avoid a view update if any documents have been created, updated or deleted then this will return results faster however, it will return possibly outdated results set the stale parameter s value to update_after to get stale results, but trigger a view update after results are returned

126 Lab Querying Views using Zend_Http_Client

127 Setting up Zend_Http_Client

128 Install Zend Framework :02 1. If not already in your include path, install Zend Framework: $ pear channel-discover pear.zfcampus.org $ pear install zfcampus/zf

129 Interactive PHP Shell :01 1. Open an interactive PHP shell: $ php -a

130 Set Up Autoloader :02 require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance();

131 All Rows

132 Reduced :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/authors'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

133 Reduced NULL key value Array ( [sum] => 3008 [count] => 7 [min] => 272 [max] => 648 [sumsqr] => )

134 Not Reduced :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/authors'); $client->setparameterget('reduce', 'false'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

135 Not Reduced id key value " " "J. Chris Anderson" 272 " " "Jan Lehnardt" 272 " " "Leonard Muellner" 648 " " "Leonard Richardson" 448 " " "Noah Slater" 272 " " "Norman Walsh" 648 " " "Sam Ruby" 448

136 Range Queries

137 By Key :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/formats'); $client->setparameterget('reduce', 'false'); $client->setparameterget('key', '"Print"'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

138 By Key id key value " " "Print" 272 " " "Print" 448 " " "Print" 648

139 By Start and End Keys :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/authors'); $client->setparameterget('reduce', 'false'); $client->setparameterget('startkey', '"j"'); $client->setparameterget('endkey', '"j\ufff0"'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

140 By Start and End Keys id key value " " "J. Chris Anderson" 272 " " "Jan Lehnardt" 272

141 Limiting, Skipping and Reversing

142 Limit Results :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/formats'); $client->setparameterget('reduce', 'false'); $client->setparameterget('limit', 5); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

143 Limit Results id key value " " "Ebook" 272 " " "Ebook" 448 " " "Print" 272 " " "Print" 448 " " "Print" 648

144 Skipping Results :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/formats'); $client->setparameterget('reduce', 'false'); $client->setparameterget('limit', 5); $client->setparameterget('skip', 5); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

145 Skipping Results id key value " " "Safari Books Online" 272 " " "Safari Books Online" 448

146 Although the skip and limit parameters can be used together to implement pagination, this can be inefficient on large data sets.

147 First Page id key value " " "Ebook" 272 " " "Ebook" 448 " " "Print" 272 " " "Print" 448 " " "Print" 648

148 Next Page :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/formats'); $client->setparameterget('reduce', 'false'); $client->setparameterget('limit', 5); $client->setparameterget('startkey', '"Print"'); $client->setparameterget('startkey_docid', ' '); $client->setparameterget('skip', 1); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

149 Next Page id key value " " "Safari Books Online" 272 " " "Safari Books Online" 448

150 Reversing Results :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/titles'); $client->setparameterget('reduce', 'false'); $client->setparameterget('descending', 'true'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

151 Reversing Results id key value " " "RESTful Web Services" 448 " " "DocBook: The Definitive Guide" 648 " " "CouchDB: The Definitive Guide" 272

152 Grouping

153 Exact Grouping :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/formats'); $client->setparameterget('group', 'true'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

154 Exact Grouping key value "Ebook" "Print" "Safari Books Online" Array ( [sum] => 720 [count] => 2 [min] => 272 [max] => 448 [sumsqr] => ) Array ( [sum] => 1368 [count] => 3 [min] => 272 [max] => 648 [sumsqr] => ) Array ( [sum] => 720 [count] => 2 [min] => 272 [max] => 448 [sumsqr] => )

155 What We re Doing Next adding a fourth book document with a released date of this is the same year and month as another book s released date creating a new releases view that indexes books by their released dates releases view will use a compound key a three-level JSON Array of year, month and day

156 Add a Fourth Document :05 $book = array( '_id' => ' ', 'title' => 'Building iphone Apps with HTML, CSS, and JavaScript', 'subtitle' => 'Making App Store Apps Without Objective-C or Cocoa', 'authors' => array('jonathan Stark'), 'publisher'=> 'O\'Reilly Media', 'formats' => array('print', 'Ebook', 'Safari Books Online'), 'released' => ' ', 'pages' => 192 ); $client = new Zend_Http_Client(); $client->seturi(' $client->setheaders('content-type', 'application/json'); $client->setrawdata(zend_json::encode($book)); $response = $client->request(zend_http_client::post); print_r($response->getstatus()); // 201

157 Releases View :05 1. In the books database in Futon, select Temporary view from the View select menu 2. Enter the following into the View Code text area: function(doc) { if (doc.released) { emit(doc.released.split("-"), doc.pages); } } 3. Enter the following in the Reduce Function text area: _stats 4. Click Save As 5. Enter default as the Design Document name 6. Enter releases as the View Name 7. Click Save

158 Exact Grouping :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/releases'); $client->setparameterget('group', 'true'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

159 Exact Grouping key value Array ( [0] => 1999 [1] => 10 [2] => 28 ) Array ( [0] => 2007 [1] => 05 [2] => 08 ) Array ( [0] => 2010 [1] => 01 [2] => 08 ) Array ( [0] => 2010 [1] => 01 [2] => 19 ) Array ( [sum] => 648 [count] => 1 [min] => 648 [max] => 648 [sumsqr] => ) Array ( [sum] => 448 [count] => 1 [min] => 448 [max] => 448 [sumsqr] => ) Array ( [sum] => 192 [count] => 1 [min] => 192 [max] => 192 [sumsqr] => ) Array ( [sum] => 272 [count] => 1 [min] => 272 [max] => 272 [sumsqr] => )

160 Group Level 1 :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/releases'); $client->setparameterget('group_level', 1); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

161 Group Level 1 key value Array ( [0] => 1999 ) Array ( [0] => 2007 ) Array ( [0] => 2010 ) Array ( [sum] => 648 [count] => 1 [min] => 648 [max] => 648 [sumsqr] => ) Array ( [sum] => 448 [count] => 1 [min] => 448 [max] => 448 [sumsqr] => ) Array ( [sum] => 464 [count] => 2 [min] => 192 [max] => 272 [sumsqr] => )

162 Group Level 2 :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/releases'); $client->setparameterget('group_level', 2); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

163 Group Level 2 key value Array ( [0] => 1999 [1] => 10 ) Array ( [0] => 2007 [1] => 05 ) Array ( [0] => 2010 [1] => 01 ) Array ( [sum] => 648 [count] => 1 [min] => 648 [max] => 648 [sumsqr] => ) Array ( [sum] => 448 [count] => 1 [min] => 448 [max] => 448 [sumsqr] => ) Array ( [sum] => 464 [count] => 2 [min] => 192 [max] => 272 [sumsqr] => )

164 Including Documents

165 Including Docs :05 $db = ' $client = new Zend_Http_Client(); $client->seturi($db. '/_design/default/_view/titles'); $client->setparameterget('reduce', 'false'); $client->setparameterget('include_docs', 'true'); $client->setheaders('accept', 'application/json'); $response = $client->request(zend_http_client::get); $body = $response->getbody(); $results = Zend_Json::decode($body); print_r($results);

166 Including Docs id key value doc " " "Building iphone Apps with HTML, CSS, and JavaScript" 192 Array ( [_id] => [_rev] => 1-09ce09fef da99957c7b14cf2 ) " " "CouchDB: The Definitive Guide" 272 Array ( [_id] => [_rev] => 2-099d205cbb59d989700ad7692cbb3e66 ) " " "DocBook: The Definitive Guide" 648 Array ( [_id] => [_rev] => 1-b945cb4799a1ccdd1689eae0e44124f1 ) " " "RESTful Web Services" 448 Array ( [_id] => [_rev] => 2-de467b329baf6259e791b830cc950ece )

167 More CouchDB Features

168 Multi-Master Replication peer-based and bi-directional no explicit cluster setup required synchronization is incremental changes feed allows for replication to other systems

169 Couchbase Mobile [1] for ios and Android 1.

170 Horizontally Scalable shared nothing architecture non-blocking reads and writes for high concurrency fault tolerant, isolated messages

171 ACID Compliant Atomicity: individual document updates are all or nothing Consistency: queries will be point in time consistent Isolation: updates isolated to document revision number Durability: success code is returned only after data is on disk

172 Authentication special _users database basic access authentication cookie authentication OAuth support

173 Security Model server admins database admins database readers document-level authorization with validation functions

174 Web Server static files as attachments (e.g. HTML, Javascript, CSS) URL rewriting HTTP proxying HTTP range requests SSL support virtual hosts

175 Application Server show functions list functions document update handlers

176 Load Balancing

177 Clustering Lounge [1] Pillow [2] BigCouch [3]

178 Extensible GeoCouch [1] for geospatial indexing couchdb-lucene [2] for full text indexing ElasticSearch [3] for full text indexing

179 Resources

180 Hosting Iris Couch Free (for now) Couchbase server GeoCouch geospatial indexing Cloudant Various pricing levels Full-text searching Ad-hoc queries Elastic scaling, clustering and sharding using BigCouch

181 Documentation and Books CouchDB Wiki CouchDB: The Definitive Guide by J. Chris Anderson, Jan Lehnardt and Noah Slater (O Reilly) Writing and Querying MapReduce Views in CouchDB by Bradley Holt (O Reilly) Scaling CouchDB by Bradley Holt (O Reilly) Getting Started with CouchDB by MC Brown (O Reilly) Beginning CouchDB by Joe Lennon (Apress)

182

183 Questions?

184 Thank Copyright 2011 Bradley Holt. All rights reserved.

CouchApps. Blog: (http://twitter.com/bradleyholt)

CouchApps. Blog: (http://twitter.com/bradleyholt) + = CouchApps Blog: http://bradley-holt.com @BradleyHolt (http://twitter.com/bradleyholt) bradley.holt@foundline.com About Me (Bradley Holt) Co-Founder and Technical Director from Vermont Battery Park

More information

Capabilities of Cloudant NoSQL Database IBM Corporation

Capabilities of Cloudant NoSQL Database IBM Corporation Capabilities of Cloudant NoSQL Database After you complete this section, you should understand: The features of the Cloudant NoSQL Database: HTTP RESTfulAPI Secondary indexes and MapReduce Cloudant Query

More information

The NoSQL movement. CouchDB as an example

The NoSQL movement. CouchDB as an example The NoSQL movement CouchDB as an example About me sleepnova - I'm a freelancer Interests: emerging technology, digital art web, embedded system, javascript, programming language Some of my works: Chrome

More information

SCALING COUCHDB WITH BIGCOUCH. Adam Kocoloski Cloudant

SCALING COUCHDB WITH BIGCOUCH. Adam Kocoloski Cloudant SCALING COUCHDB WITH BIGCOUCH Adam Kocoloski Cloudant Erlang Factory SF Bay Area 2011 OUTLINE Introductions Brief intro to CouchDB BigCouch Usage Overview BigCouch Internals Reports from the Trenches 2

More information

Deploying to the Edge CouchDB

Deploying to the Edge CouchDB Deploying to the Edge CouchDB Apache Relax Who s Talking? J Chris Anderson / jchris@apache.org / @jchris PHP -> Rails -> JSON -> CouchDB Director, couch.io And You? Web developers? JavaScript coders? CouchDB

More information

Non-Relational Databases. Pelle Jakovits

Non-Relational Databases. Pelle Jakovits Non-Relational Databases Pelle Jakovits 25 October 2017 Outline Background Relational model Database scaling The NoSQL Movement CAP Theorem Non-relational data models Key-value Document-oriented Column

More information

STARCOUNTER. Technical Overview

STARCOUNTER. Technical Overview STARCOUNTER Technical Overview Summary 3 Introduction 4 Scope 5 Audience 5 Prerequisite Knowledge 5 Virtual Machine Database Management System 6 Weaver 7 Shared Memory 8 Atomicity 8 Consistency 9 Isolation

More information

This tutorial helps the professionals aspiring to make a career in Big Data and NoSQL databases, especially the documents store.

This tutorial helps the professionals aspiring to make a career in Big Data and NoSQL databases, especially the documents store. About the Tutorial This tutorial provides a brief knowledge about CouchDB, the procedures to set it up, and the ways to interact with CouchDB server using curl and Futon. It also tells how to create, update

More information

Jargons, Concepts, Scope and Systems. Key Value Stores, Document Stores, Extensible Record Stores. Overview of different scalable relational systems

Jargons, Concepts, Scope and Systems. Key Value Stores, Document Stores, Extensible Record Stores. Overview of different scalable relational systems Jargons, Concepts, Scope and Systems Key Value Stores, Document Stores, Extensible Record Stores Overview of different scalable relational systems Examples of different Data stores Predictions, Comparisons

More information

OpenEdge & CouchDB. Integrating the OpenEdge ABL with CouchDB. Don Beattie Software Architect Quicken Loans Inc.

OpenEdge & CouchDB. Integrating the OpenEdge ABL with CouchDB. Don Beattie Software Architect Quicken Loans Inc. OpenEdge & CouchDB Integrating the OpenEdge ABL with CouchDB Don Beattie Software Architect Quicken Loans Inc. Apache CouchDB has started. Time to relax. Intro The OpenEdge RDBMS is a great database that

More information

CIB Session 12th NoSQL Databases Structures

CIB Session 12th NoSQL Databases Structures CIB Session 12th NoSQL Databases Structures By: Shahab Safaee & Morteza Zahedi Software Engineering PhD Email: safaee.shx@gmail.com, morteza.zahedi.a@gmail.com cibtrc.ir cibtrc cibtrc 2 Agenda What is

More information

Introduction to Big Data. NoSQL Databases. Instituto Politécnico de Tomar. Ricardo Campos

Introduction to Big Data. NoSQL Databases. Instituto Politécnico de Tomar. Ricardo Campos Instituto Politécnico de Tomar Introduction to Big Data NoSQL Databases Ricardo Campos Mestrado EI-IC Análise e Processamento de Grandes Volumes de Dados Tomar, Portugal, 2016 Part of the slides used in

More information

CSE 544 Principles of Database Management Systems. Magdalena Balazinska Winter 2015 Lecture 14 NoSQL

CSE 544 Principles of Database Management Systems. Magdalena Balazinska Winter 2015 Lecture 14 NoSQL CSE 544 Principles of Database Management Systems Magdalena Balazinska Winter 2015 Lecture 14 NoSQL References Scalable SQL and NoSQL Data Stores, Rick Cattell, SIGMOD Record, December 2010 (Vol. 39, No.

More information

Chapter 24 NOSQL Databases and Big Data Storage Systems

Chapter 24 NOSQL Databases and Big Data Storage Systems Chapter 24 NOSQL Databases and Big Data Storage Systems - Large amounts of data such as social media, Web links, user profiles, marketing and sales, posts and tweets, road maps, spatial data, email - NOSQL

More information

NoSQL systems. Lecture 21 (optional) Instructor: Sudeepa Roy. CompSci 516 Data Intensive Computing Systems

NoSQL systems. Lecture 21 (optional) Instructor: Sudeepa Roy. CompSci 516 Data Intensive Computing Systems CompSci 516 Data Intensive Computing Systems Lecture 21 (optional) NoSQL systems Instructor: Sudeepa Roy Duke CS, Spring 2016 CompSci 516: Data Intensive Computing Systems 1 Key- Value Stores Duke CS,

More information

Distributed Non-Relational Databases. Pelle Jakovits

Distributed Non-Relational Databases. Pelle Jakovits Distributed Non-Relational Databases Pelle Jakovits Tartu, 7 December 2018 Outline Relational model NoSQL Movement Non-relational data models Key-value Document-oriented Column family Graph Non-relational

More information

C exam. Number: C Passing Score: 800 Time Limit: 120 min IBM C IBM Cloud Platform Application Development

C exam. Number: C Passing Score: 800 Time Limit: 120 min IBM C IBM Cloud Platform Application Development C5050-285.exam Number: C5050-285 Passing Score: 800 Time Limit: 120 min IBM C5050-285 IBM Cloud Platform Application Development Exam A QUESTION 1 What are the two key benefits of Cloudant Sync? (Select

More information

NOSQL EGCO321 DATABASE SYSTEMS KANAT POOLSAWASD DEPARTMENT OF COMPUTER ENGINEERING MAHIDOL UNIVERSITY

NOSQL EGCO321 DATABASE SYSTEMS KANAT POOLSAWASD DEPARTMENT OF COMPUTER ENGINEERING MAHIDOL UNIVERSITY NOSQL EGCO321 DATABASE SYSTEMS KANAT POOLSAWASD DEPARTMENT OF COMPUTER ENGINEERING MAHIDOL UNIVERSITY WHAT IS NOSQL? Stands for No-SQL or Not Only SQL. Class of non-relational data storage systems E.g.

More information

CIT 668: System Architecture. Distributed Databases

CIT 668: System Architecture. Distributed Databases CIT 668: System Architecture Distributed Databases Topics 1. MySQL 2. Concurrency 3. Transactions and ACID 4. Database scaling 5. Replication 6. Partitioning 7. Brewer s CAP Theorem 8. ACID vs. BASE 9.

More information

Apache CouchDB. Release 1.3.0

Apache CouchDB. Release 1.3.0 Apache CouchDB Release 1.3.0 March 28, 2014 Contents i ii CHAPTER 1 Introduction There are two interfaces to CouchDB, the built-in Futon web-based interface and the CouchDB API accessed through the HTTP

More information

ReST 2000 Roy Fielding W3C

ReST 2000 Roy Fielding W3C Outline What is ReST? Constraints in ReST REST Architecture Components Features of ReST applications Example of requests in REST & SOAP Complex REST request REST Server response Real REST examples REST

More information

Oral Questions and Answers (DBMS LAB) Questions & Answers- DBMS

Oral Questions and Answers (DBMS LAB) Questions & Answers- DBMS Questions & Answers- DBMS https://career.guru99.com/top-50-database-interview-questions/ 1) Define Database. A prearranged collection of figures known as data is called database. 2) What is DBMS? Database

More information

Enterprise Software Architecture & Design

Enterprise Software Architecture & Design Enterprise Software Architecture & Design Characteristics Servers application server, web server, proxy servers etc. Clients heterogeneous users, business partners (B2B) scale large number of clients distributed

More information

Friday, April 26, 13

Friday, April 26, 13 Introduc)on to Map Reduce with Couchbase Tugdual Grall / @tgrall NoSQL Ma)ers 13 - Cologne - April 25th 2013 About Me Tugdual Tug Grall Couchbase exo Technical Evangelist CTO Oracle Developer/Product Manager

More information

Introduction to NoSQL Databases

Introduction to NoSQL Databases Introduction to NoSQL Databases Roman Kern KTI, TU Graz 2017-10-16 Roman Kern (KTI, TU Graz) Dbase2 2017-10-16 1 / 31 Introduction Intro Why NoSQL? Roman Kern (KTI, TU Graz) Dbase2 2017-10-16 2 / 31 Introduction

More information

DATABASE SYSTEMS. Database programming in a web environment. Database System Course, 2016

DATABASE SYSTEMS. Database programming in a web environment. Database System Course, 2016 DATABASE SYSTEMS Database programming in a web environment Database System Course, 2016 AGENDA FOR TODAY Advanced Mysql More than just SELECT Creating tables MySQL optimizations: Storage engines, indexing.

More information

ExtraHop 7.3 ExtraHop Trace REST API Guide

ExtraHop 7.3 ExtraHop Trace REST API Guide ExtraHop 7.3 ExtraHop Trace REST API Guide 2018 ExtraHop Networks, Inc. All rights reserved. This manual in whole or in part, may not be reproduced, translated, or reduced to any machinereadable form without

More information

Composer Help. Web Request Common Block

Composer Help. Web Request Common Block Composer Help Web Request Common Block 7/4/2018 Web Request Common Block Contents 1 Web Request Common Block 1.1 Name Property 1.2 Block Notes Property 1.3 Exceptions Property 1.4 Request Method Property

More information

Ajax Ajax Ajax = Asynchronous JavaScript and XML Using a set of methods built in to JavaScript to transfer data between the browser and a server in the background Reduces the amount of data that must be

More information

Be warned Niklas Gustavsson

Be warned Niklas Gustavsson 1 Niklas Gustavsson niklas.gustavsson@callistaenterprise.se www.callistaenterprise.se Be warned CouchDB, Slide 2 2 Won't replace your relational database You (probably) won't be using it any time soon

More information

Realtime visitor analysis with Couchbase and Elasticsearch

Realtime visitor analysis with Couchbase and Elasticsearch Realtime visitor analysis with Couchbase and Elasticsearch Jeroen Reijn @jreijn #nosql13 About me Jeroen Reijn Software engineer Hippo @jreijn http://blog.jeroenreijn.com About Hippo Visitor Analysis OneHippo

More information

Nasuni Data API Nasuni Corporation Boston, MA

Nasuni Data API Nasuni Corporation Boston, MA Nasuni Corporation Boston, MA Introduction The Nasuni API has been available in the Nasuni Filer since September 2012 (version 4.0.1) and is in use by hundreds of mobile clients worldwide. Previously,

More information

EPL660: Information Retrieval and Search Engines Lab 3

EPL660: Information Retrieval and Search Engines Lab 3 EPL660: Information Retrieval and Search Engines Lab 3 Παύλος Αντωνίου Γραφείο: B109, ΘΕΕ01 University of Cyprus Department of Computer Science Apache Solr Popular, fast, open-source search platform built

More information

CS 498RK FALL RESTFUL APIs

CS 498RK FALL RESTFUL APIs CS 498RK FALL 2017 RESTFUL APIs Designing Restful Apis blog.mwaysolutions.com/2014/06/05/10-best-practices-for-better-restful-api/ www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api Resources

More information

Nasuni Data API Nasuni Corporation Boston, MA

Nasuni Data API Nasuni Corporation Boston, MA Nasuni Corporation Boston, MA Introduction The Nasuni API has been available in the Nasuni Filer since September 2012 (version 4.0.1) and is in use by hundreds of mobile clients worldwide. Previously,

More information

Web Applications. Software Engineering 2017 Alessio Gambi - Saarland University

Web Applications. Software Engineering 2017 Alessio Gambi - Saarland University Web Applications Software Engineering 2017 Alessio Gambi - Saarland University Based on the work of Cesare Pautasso, Christoph Dorn, Andrea Arcuri, and others ReCap Software Architecture A software system

More information

Black Box DCX3000 / DCX1000 Using the API

Black Box DCX3000 / DCX1000 Using the API Black Box DCX3000 / DCX1000 Using the API updated 2/22/2017 This document will give you a brief overview of how to access the DCX3000 / DCX1000 API and how you can interact with it using an online tool.

More information

Course Content MongoDB

Course Content MongoDB Course Content MongoDB 1. Course introduction and mongodb Essentials (basics) 2. Introduction to NoSQL databases What is NoSQL? Why NoSQL? Difference Between RDBMS and NoSQL Databases Benefits of NoSQL

More information

Scalability of web applications

Scalability of web applications Scalability of web applications CSCI 470: Web Science Keith Vertanen Copyright 2014 Scalability questions Overview What's important in order to build scalable web sites? High availability vs. load balancing

More information

Building RESTful Web Services with Erlang and Yaws

Building RESTful Web Services with Erlang and Yaws Building RESTful Web Services with Erlang and Yaws Steve Vinoski Member of Technical Staff Verivue, Inc., Westford, MA USA http://steve.vinoski.net/ QCon San Francisco 20 November 2008 Erlang Functional

More information

Scaling DreamFactory

Scaling DreamFactory Scaling DreamFactory This white paper is designed to provide information to enterprise customers about how to scale a DreamFactory Instance. The sections below talk about horizontal, vertical, and cloud

More information

Document stores using CouchDB

Document stores using CouchDB 2018 Document stores using CouchDB ADVANCED DATABASE PROJECT APARNA KHIRE, MINGRUI DONG aparna.khire@vub.be, mingdong@ulb.ac.be 1 Table of Contents 1. Introduction... 3 2. Background... 3 2.1 NoSQL Database...

More information

Distributed Systems. 29. Distributed Caching Paul Krzyzanowski. Rutgers University. Fall 2014

Distributed Systems. 29. Distributed Caching Paul Krzyzanowski. Rutgers University. Fall 2014 Distributed Systems 29. Distributed Caching Paul Krzyzanowski Rutgers University Fall 2014 December 5, 2014 2013 Paul Krzyzanowski 1 Caching Purpose of a cache Temporary storage to increase data access

More information

SCALARIS. Irina Calciu Alex Gillmor

SCALARIS. Irina Calciu Alex Gillmor SCALARIS Irina Calciu Alex Gillmor RoadMap Motivation Overview Architecture Features Implementation Benchmarks API Users Demo Conclusion Motivation (NoSQL) "One size doesn't fit all" Stonebraker Reinefeld

More information

A Survey Paper on NoSQL Databases: Key-Value Data Stores and Document Stores

A Survey Paper on NoSQL Databases: Key-Value Data Stores and Document Stores A Survey Paper on NoSQL Databases: Key-Value Data Stores and Document Stores Nikhil Dasharath Karande 1 Department of CSE, Sanjay Ghodawat Institutes, Atigre nikhilkarande18@gmail.com Abstract- This paper

More information

This tutorial discusses the basics of PouchDB along with relevant examples for easy understanding.

This tutorial discusses the basics of PouchDB along with relevant examples for easy understanding. About this Tutorial PouchDBis an open source in-browser database API written in JavaScript. It ismodelled after CouchDB a NoSQL database that powers npm. Using this API, we can build applications that

More information

Oracle APEX 18.1 New Features

Oracle APEX 18.1 New Features Oracle APEX 18.1 New Features May, 2018 Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated

More information

COUCHDB - CURL & FUTON

COUCHDB - CURL & FUTON COUCHDB - CURL & FUTON http://www.tutorialspoint.com/couchdb/couchdb_curl_futon.htm Copyright tutorialspoint.com curl Utility curl utility is a way to communicate with CouchDB. It is a tool to transfer

More information

MarkLogic Server. REST Application Developer s Guide. MarkLogic 9 May, Copyright 2017 MarkLogic Corporation. All rights reserved.

MarkLogic Server. REST Application Developer s Guide. MarkLogic 9 May, Copyright 2017 MarkLogic Corporation. All rights reserved. REST Application Developer s Guide 1 MarkLogic 9 May, 2017 Last Revised: 9.0-2, July, 2017 Copyright 2017 MarkLogic Corporation. All rights reserved. Table of Contents Table of Contents REST Application

More information

The course modules of MongoDB developer and administrator online certification training:

The course modules of MongoDB developer and administrator online certification training: The course modules of MongoDB developer and administrator online certification training: 1 An Overview of the Course Introduction to the course Table of Contents Course Objectives Course Overview Value

More information

Caching. Caching Overview

Caching. Caching Overview Overview Responses to specific URLs cached in intermediate stores: Motivation: improve performance by reducing response time and network bandwidth. Ideally, subsequent request for the same URL should be

More information

5/2/16. Announcements. NoSQL Motivation. The New Hipster: NoSQL. Serverless. What is the Problem? Database Systems CSE 414

5/2/16. Announcements. NoSQL Motivation. The New Hipster: NoSQL. Serverless. What is the Problem? Database Systems CSE 414 Announcements Database Systems CSE 414 Lecture 16: NoSQL and JSon Current assignments: Homework 4 due tonight Web Quiz 6 due next Wednesday [There is no Web Quiz 5 Today s lecture: JSon The book covers

More information

PROFESSIONAL. NoSQL. Shashank Tiwari WILEY. John Wiley & Sons, Inc.

PROFESSIONAL. NoSQL. Shashank Tiwari WILEY. John Wiley & Sons, Inc. PROFESSIONAL NoSQL Shashank Tiwari WILEY John Wiley & Sons, Inc. Examining CONTENTS INTRODUCTION xvil CHAPTER 1: NOSQL: WHAT IT IS AND WHY YOU NEED IT 3 Definition and Introduction 4 Context and a Bit

More information

Database Systems CSE 414

Database Systems CSE 414 Database Systems CSE 414 Lecture 16: NoSQL and JSon CSE 414 - Spring 2016 1 Announcements Current assignments: Homework 4 due tonight Web Quiz 6 due next Wednesday [There is no Web Quiz 5] Today s lecture:

More information

Full Stack Web Developer Nanodegree Syllabus

Full Stack Web Developer Nanodegree Syllabus Full Stack Web Developer Nanodegree Syllabus Build Complex Web Applications Before You Start Thank you for your interest in the Full Stack Web Developer Nanodegree! In order to succeed in this program,

More information

10/18/2017. Announcements. NoSQL Motivation. NoSQL. Serverless Architecture. What is the Problem? Database Systems CSE 414

10/18/2017. Announcements. NoSQL Motivation. NoSQL. Serverless Architecture. What is the Problem? Database Systems CSE 414 Announcements Database Systems CSE 414 Lecture 11: NoSQL & JSON (mostly not in textbook only Ch 11.1) HW5 will be posted on Friday and due on Nov. 14, 11pm [No Web Quiz 5] Today s lecture: NoSQL & JSON

More information

CouchDB. Johan Sørensen

CouchDB. Johan Sørensen CouchDB Johan Sørensen This is CouchDB A wonderful idea This is CouchDB A wonderful idea Based on an awful thing This is CouchDB Lotus Notes This is CouchDB Damien Katz wanted to recreate Lotus Notes This

More information

Advanced Data Management Technologies

Advanced Data Management Technologies ADMT 2017/18 Unit 15 J. Gamper 1/44 Advanced Data Management Technologies Unit 15 Introduction to NoSQL J. Gamper Free University of Bozen-Bolzano Faculty of Computer Science IDSE ADMT 2017/18 Unit 15

More information

HTTP, REST Web Services

HTTP, REST Web Services HTTP, REST Web Services Martin Ledvinka martin.ledvinka@fel.cvut.cz Winter Term 2018 Martin Ledvinka (martin.ledvinka@fel.cvut.cz) HTTP, REST Web Services Winter Term 2018 1 / 36 Contents 1 HTTP 2 RESTful

More information

AN introduction to nosql databases

AN introduction to nosql databases AN introduction to nosql databases Terry McCann @SQLshark Purpose of this presentation? It is important for a data scientist / data engineer to have the right tool for the right job. We will look at an

More information

Enterprise Web based Software Architecture & Design

Enterprise Web based Software Architecture & Design IMPORTANT NOTICE TO STUDENTS These slides are NOT to be used as a replacement for student notes. These slides are sometimes vague and incomplete on purpose to spark class discussions Enterprise Web based

More information

Designing RESTful Web Applications. Ben Ramsey

Designing RESTful Web Applications. Ben Ramsey Designing RESTful Web Applications Ben Ramsey About Me Proud father of 3-month-old Sean Organizer of Atlanta PHP user group Founder of PHP Groups Founding principal of PHP Security Consortium Original

More information

Topics. History. Architecture. MongoDB, Mongoose - RDBMS - SQL. - NoSQL

Topics. History. Architecture. MongoDB, Mongoose - RDBMS - SQL. - NoSQL Databases Topics History - RDBMS - SQL Architecture - SQL - NoSQL MongoDB, Mongoose Persistent Data Storage What features do we want in a persistent data storage system? We have been using text files to

More information

GridGain and Apache Ignite In-Memory Performance with Durability of Disk

GridGain and Apache Ignite In-Memory Performance with Durability of Disk GridGain and Apache Ignite In-Memory Performance with Durability of Disk Dmitriy Setrakyan Apache Ignite PMC GridGain Founder & CPO http://ignite.apache.org #apacheignite Agenda What is GridGain and Ignite

More information

Modern App Architecture

Modern App Architecture Modern App Architecture Brent Edwards Principal Lead Consultant Magenic Level: Intermediate BrentE@magenic.com @brentledwards http://www.brentedwards.net https://github.com/brentedwards BRENT EDWARDS MyVote

More information

Goal of the presentation is to give an introduction of NoSQL databases, why they are there.

Goal of the presentation is to give an introduction of NoSQL databases, why they are there. 1 Goal of the presentation is to give an introduction of NoSQL databases, why they are there. We want to present "Why?" first to explain the need of something like "NoSQL" and then in "What?" we go in

More information

Document Object Storage with MongoDB

Document Object Storage with MongoDB Document Object Storage with MongoDB Lecture BigData Analytics Julian M. Kunkel julian.kunkel@googlemail.com University of Hamburg / German Climate Computing Center (DKRZ) 2017-12-15 Disclaimer: Big Data

More information

CSE 344 Final Review. August 16 th

CSE 344 Final Review. August 16 th CSE 344 Final Review August 16 th Final In class on Friday One sheet of notes, front and back cost formulas also provided Practice exam on web site Good luck! Primary Topics Parallel DBs parallel join

More information

ElasticSearch in Production

ElasticSearch in Production ElasticSearch in Production lessons learned Anne Veling, ApacheCon EU, November 6, 2012 agenda! Introduction! ElasticSearch! Udini! Upcoming Tool! Lessons Learned introduction! Anne Veling, @anneveling!

More information

Release Presentation. ODS Web Services Version Open Data Services Via Web Services. Release Date: 2014/09/30

Release Presentation. ODS Web Services Version Open Data Services Via Web Services. Release Date: 2014/09/30 Release Presentation ODS Web Services Version 1.1.1 Open Data Services Via Web Services Release Date: 2014/09/30 Deliverables The document represents a companion standard recommendation for interacting

More information

Data Transformation and Query Analysis of Elasticsearch and CouchDB Document Oriented Databases

Data Transformation and Query Analysis of Elasticsearch and CouchDB Document Oriented Databases Data Transformation and Query Analysis of Elasticsearch and CouchDB Document Oriented Databases Thesis submitted in partial fulfillment of the requirements for the award of degree of Master of Engineering

More information

Search Engines and Time Series Databases

Search Engines and Time Series Databases Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Search Engines and Time Series Databases Corso di Sistemi e Architetture per Big Data A.A. 2017/18

More information

WWW, REST, and Web Services

WWW, REST, and Web Services WWW, REST, and Web Services Instructor: Yongjie Zheng Aprile 18, 2017 CS 5553: Software Architecture and Design World Wide Web (WWW) What is the Web? What challenges does the Web have to address? 2 What

More information

Modern Database Concepts

Modern Database Concepts Modern Database Concepts Basic Principles Doc. RNDr. Irena Holubova, Ph.D. holubova@ksi.mff.cuni.cz NoSQL Overview Main objective: to implement a distributed state Different objects stored on different

More information

IBM Planning Analytics Workspace Local Distributed Soufiane Azizi. IBM Planning Analytics

IBM Planning Analytics Workspace Local Distributed Soufiane Azizi. IBM Planning Analytics IBM Planning Analytics Workspace Local Distributed Soufiane Azizi IBM Planning Analytics IBM Canada - Cognos Ottawa Lab. IBM Planning Analytics Agenda 1. Demo PAW High Availability on a Prebuilt Swarm

More information

Oracle NoSQL Database Enterprise Edition, Version 18.1

Oracle NoSQL Database Enterprise Edition, Version 18.1 Oracle NoSQL Database Enterprise Edition, Version 18.1 Oracle NoSQL Database is a scalable, distributed NoSQL database, designed to provide highly reliable, flexible and available data management across

More information

Azure-persistence MARTIN MUDRA

Azure-persistence MARTIN MUDRA Azure-persistence MARTIN MUDRA Storage service access Blobs Queues Tables Storage service Horizontally scalable Zone Redundancy Accounts Based on Uri Pricing Calculator Azure table storage Storage Account

More information

04 Webservices. Web APIs REST Coulouris. Roy Fielding, Aphrodite, chp.9. Chp 5/6

04 Webservices. Web APIs REST Coulouris. Roy Fielding, Aphrodite, chp.9. Chp 5/6 04 Webservices Web APIs REST Coulouris chp.9 Roy Fielding, 2000 Chp 5/6 Aphrodite, 2002 http://www.xml.com/pub/a/2004/12/01/restful-web.html http://www.restapitutorial.com Webservice "A Web service is

More information

Help! I need more servers! What do I do?

Help! I need more servers! What do I do? Help! I need more servers! What do I do? Scaling a PHP application 1 2-Feb-09 Introduction A real world example The wonderful world of startups Who am I? 2 2-Feb-09 Presentation Overview - Scalability

More information

Computer Networks. Wenzhong Li. Nanjing University

Computer Networks. Wenzhong Li. Nanjing University Computer Networks Wenzhong Li Nanjing University 1 Chapter 8. Internet Applications Internet Applications Overview Domain Name Service (DNS) Electronic Mail File Transfer Protocol (FTP) WWW and HTTP Content

More information

COMP9321 Web Application Engineering

COMP9321 Web Application Engineering COMP9321 Web Application Engineering Semester 2, 2015 Dr. Amin Beheshti Service Oriented Computing Group, CSE, UNSW Australia Week 6 http://webapps.cse.unsw.edu.au/webcms2/course/index.php?cid=2411 1 We

More information

MongoDB An Overview. 21-Oct Socrates

MongoDB An Overview. 21-Oct Socrates MongoDB An Overview 21-Oct-2016 Socrates Agenda What is NoSQL DB? Types of NoSQL DBs DBMS and MongoDB Comparison Why MongoDB? MongoDB Architecture Storage Engines Data Model Query Language Security Data

More information

BaasBox. Open Source Backend as a Service. Otto Hylli

BaasBox. Open Source Backend as a Service. Otto Hylli BaasBox Open Source Backend as a Service Otto Hylli Overview (1/2) Developed by BaasBox an Italian startup company Project was declared started on 1st of July 2012 on the BaasBox blog Open source under

More information

big picture parallel db (one data center) mix of OLTP and batch analysis lots of data, high r/w rates, 1000s of cheap boxes thus many failures

big picture parallel db (one data center) mix of OLTP and batch analysis lots of data, high r/w rates, 1000s of cheap boxes thus many failures Lecture 20 -- 11/20/2017 BigTable big picture parallel db (one data center) mix of OLTP and batch analysis lots of data, high r/w rates, 1000s of cheap boxes thus many failures what does paper say Google

More information

RKN 2015 Application Layer Short Summary

RKN 2015 Application Layer Short Summary RKN 2015 Application Layer Short Summary HTTP standard version now: 1.1 (former 1.0 HTTP /2.0 in draft form, already used HTTP Requests Headers and body counterpart: answer Safe methods (requests): GET,

More information

MongoDB - a No SQL Database What you need to know as an Oracle DBA

MongoDB - a No SQL Database What you need to know as an Oracle DBA MongoDB - a No SQL Database What you need to know as an Oracle DBA David Burnham Aims of this Presentation To introduce NoSQL database technology specifically using MongoDB as an example To enable the

More information

10 Million Smart Meter Data with Apache HBase

10 Million Smart Meter Data with Apache HBase 10 Million Smart Meter Data with Apache HBase 5/31/2017 OSS Solution Center Hitachi, Ltd. Masahiro Ito OSS Summit Japan 2017 Who am I? Masahiro Ito ( 伊藤雅博 ) Software Engineer at Hitachi, Ltd. Focus on

More information

Working with the Seagull Framework. By Demian Turner, Seagull Systems

Working with the Seagull Framework. By Demian Turner, Seagull Systems Working with the Seagull Framework By Demian Turner, Seagull Systems seagullproject.org Who is Demian Turner? Developing websites since 1996, using PHP since 1999 Committer on several open source projects:

More information

Introduction Aggregate data model Distribution Models Consistency Map-Reduce Types of NoSQL Databases

Introduction Aggregate data model Distribution Models Consistency Map-Reduce Types of NoSQL Databases Introduction Aggregate data model Distribution Models Consistency Map-Reduce Types of NoSQL Databases Key-Value Document Column Family Graph John Edgar 2 Relational databases are the prevalent solution

More information

Introduction to Computer Science. William Hsu Department of Computer Science and Engineering National Taiwan Ocean University

Introduction to Computer Science. William Hsu Department of Computer Science and Engineering National Taiwan Ocean University Introduction to Computer Science William Hsu Department of Computer Science and Engineering National Taiwan Ocean University Chapter 9: Database Systems supplementary - nosql You can have data without

More information

This tutorial will help you understand JSON and its use within various programming languages such as PHP, PERL, Python, Ruby, Java, etc.

This tutorial will help you understand JSON and its use within various programming languages such as PHP, PERL, Python, Ruby, Java, etc. About the Tutorial JSON or JavaScript Object Notation is a lightweight text-based open standard designed for human-readable data interchange. The JSON format was originally specified by Douglas Crockford,

More information

Oracle NoSQL Database Enterprise Edition, Version 18.1

Oracle NoSQL Database Enterprise Edition, Version 18.1 Oracle NoSQL Database Enterprise Edition, Version 18.1 Oracle NoSQL Database is a scalable, distributed NoSQL database, designed to provide highly reliable, flexible and available data management across

More information

Scott Meder Senior Regional Sales Manager

Scott Meder Senior Regional Sales Manager www.raima.com Scott Meder Senior Regional Sales Manager scott.meder@raima.com Short Introduction to Raima What is Data Management What are your requirements? How do I make the right decision? - Architecture

More information

CONTRACTOR IS ACTING UNDER A FRAMEWORK CONTRACT CONCLUDED WITH THE COMMISSION

CONTRACTOR IS ACTING UNDER A FRAMEWORK CONTRACT CONCLUDED WITH THE COMMISSION Hands-on Session NoSQL DB Donato Summa THE CONTRACTOR IS ACTING UNDER A FRAMEWORK CONTRACT CONCLUDED WITH THE COMMISSION 1 Summary Elasticsearch How to get Elasticsearch up and running ES data organization

More information

Protocol Buffers, grpc

Protocol Buffers, grpc Protocol Buffers, grpc Szolgáltatásorientált rendszerintegráció Service-Oriented System Integration Dr. Balázs Simon BME, IIT Outline Remote communication application level vs. transport level protocols

More information

Goal of this document: A simple yet effective

Goal of this document: A simple yet effective INTRODUCTION TO ELK STACK Goal of this document: A simple yet effective document for folks who want to learn basics of ELK (Elasticsearch, Logstash and Kibana) without any prior knowledge. Introduction:

More information

GeneXus for Smart Devices course - Architecture of Smart Device Applications

GeneXus for Smart Devices course - Architecture of Smart Device Applications GeneXus for Smart Devices course - Architecture of Smart Device Applications The problem to solve is the construction of a backend for a real estate office, with a web section and another section for smart

More information

MySQL High Availability

MySQL High Availability MySQL High Availability InnoDB Cluster and NDB Cluster Ted Wennmark ted.wennmark@oracle.com Copyright 2016, Oracle and/or its its affiliates. All All rights reserved. Safe Harbor Statement The following

More information

CSE 344 JULY 9 TH NOSQL

CSE 344 JULY 9 TH NOSQL CSE 344 JULY 9 TH NOSQL ADMINISTRATIVE MINUTIAE HW3 due Wednesday tests released actual_time should have 0s not NULLs upload new data file or use UPDATE to change 0 ~> NULL Extra OOs on Mondays 5-7pm in

More information

Seminar on. By Sai Rahul Reddy P. 2/2/2005 Web Caching 1

Seminar on. By Sai Rahul Reddy P. 2/2/2005 Web Caching 1 Seminar on By Sai Rahul Reddy P 2/2/2005 Web Caching 1 Topics covered 1. Why Caching 2. Advantages of Caching 3. Disadvantages of Caching 4. Cache-Control HTTP Headers 5. Proxy Caching 6. Caching architectures

More information