couchconf tokyo developing with couchbase part iii
TRANSCRIPT
1
Developing with Couchbase Part III:Advanced Application Development
Matt IngenthronDirector, Developer Solutions
5
THE QUERY API
6
Querying with PHP – Custom View
<?javascript
// map function
function(doc) {
if(doc.name) {
emit(doc.name);
}
}
<?php
include "Couchbase.php";
$cb = new Couchbase;
$cb->addCouchbaseServer("localhost");
$view = $cb->getView("beer/names"); // "custom" view
$result = $view->query();
foreach($result AS $row) {
echo $row->key . ": " . $row->value;
}
7
Querying with PHP – Custom View Reverse
<?php
include "Couchbase.php";
$cb = new Couchbase;
$cb->addCouchbaseServer("localhost");
$view = $cb->getView("beer/names");
$result = $view->query(array(
"descending" => true
));
foreach($result AS $row) {
echo $row->key . ": " $row->value;
}
8
Querying with PHP – Custom View Key
<?php
include "Couchbase.php";
$cb = new Couchbase;
$cb->addCouchbaseServer("localhost");
$view = $cb->getView("beer/names");
$result = $view->query(array(
"key" => "Hoptimus Prime"
));
foreach($result AS $row) {
echo $row->key . ": " $row->value;
}
9
Querying with PHP – Custom View Key Range
<?php
include "Couchbase.php";
$cb = new Couchbase;
$cb->addCouchbaseServer("localhost");
$view = $cb->getView("beer/names");
$result = $view->query(array(
"startkey" => "A",
"endkey" => "B"
));
foreach($result AS $row) {
echo $row->key . ": " $row->value;
}
10
Querying with PHP – Custom View Key Range Limit
<?php
include "Couchbase.php";
$cb = new Couchbase;
$cb->addCouchbaseServer("localhost");
$view = $cb->getView("beer/names");
$result = $view->query(array(
"startkey" => "A",
"endkey" => "B",
"limit" => 10
));
foreach($result AS $row) {
echo $row->key . ": " $row->value;
}
11
USING THE QUERY API FOR CALCULATION
12
Querying with PHP – Custom View
<?javascript
// map function
function(doc) {
if(doc.category) {
emit(doc.category, 1);
}
}
//reduce: _count
<?php
include "Couchbase.php";
$cb = new Couchbase;
$cb->addCouchbaseServer("localhost");
$view = $cb->getView("beer/categories"); // "custom" view
$result = $view->query(array("group" => true));
foreach($result AS $row) {
echo $row->key . ": " $row->value;
}
13
View Calculation Result
16
PAGING OVER VIEWS
17
Querying with PHP – Custom View Pagination
<?php
$view = $cb->getView("beer/names");
$resultPages = $view->getResultPaginator();
$resultPages->setRowsPerPage(10);
$resultPages->setOptions(array(
"startkey" => "A",
"endkey" => "B"
);
foreach($resultPages AS $row) {
echo $row->key . ": " $row->value;
}
18
Querying with PHP – Custom View Pagination
<?php
$view = $cb->getView("beer/names");
$pageKey = $_GET["pageKey"]; // URL ESCAPE!
$resultPages = $view->getResultPaginator();
$resultPages->setPageKey($pageKey);
$resultPages->setRowsPerPage(10)
;$resultPages->setOptions(array(
"startkey" => "A",
"endkey" => "B"
);
foreach($resultPages AS $row) {
echo $row->key . ": " $row->value;
}
$pageKey = $resultPages->key();
echo '<a href='"?pageKey=' . $pageKey. '"'>Next</a>';
19
ERROR HANDLING
20
Error Handling
<?php
// ... skip setup
$cb->set("a", 1); // Silent Oops.
$result = $cb->set("a", 1);
if($result == false) {
$code = $cb->getResultCode();
echo $cb->getResultMessage($code);
}
21
Error Handling
<?php
// ... skip setup
$result = $cb->set("a", 1);
if($result == false) { // something went wrong
$code = $cb->getResultCode(); // lets find it
switch($code) {
case COUCHBASE::RES_HOST_LOOKUP_FAILURE:
echo "DNS lookup to Server failed";
break;
case COUCHBASE::RES_UNKNOWN_READ_FAILURE:
echo "Failed to read from network";
break;
case COUCHBASE::RES_WRITE_FAILURE:
echo "Failed to read from network";
break;
case COUCHBASE:RES_TIMEOUT:
echo "Operation timed out";
break;
}
}
22
• Would be great if everything went perfectly in a cluster, but…
– Node failures
– System becomes overloaded
– Temporary out of memory conditions
Cluster Ready Error Handling
23
Q&A