Recommended: Sing it, brah! 5 fabulous songs for developers
JW's Top 5
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Page 5 of 7
Couchbase indexing and queries
Queries on Couchbase Server are performed via "views," Couchbase terminology for indexes. Put another way, when you create
an index, you're provided with a view that serves as your mechanism for querying Couchbase data. Views are new to Couchbase
2.0, as is the incremental mapreduce engine that powers the actual creation of views. Note that queries really didn't exist prior to Couchbase Server 2.0. Until
this latest release, the database was a key/value storage system that simply did not understand the concept of a multifield
document.
To define a view, you build a specific kind of document called a design document. The design document holds the JavaScript
code that implements the mapreduce operations that create the view's index. Design documents are bound to specific buckets, which means that queries cannot
execute across multiple buckets. Couchbase's "eventual consistency" plays a role in views as well. If you add a new document
to a bucket or update an existing document, the change may not be immediately visible.
The map function in a design document's mapreduce specification filters and extracts information from the documents against which it executes. The result is a set of key/value
pairs that comprise the query-accelerating index. The reduce function is optional. It is typically used to aggregate or sum the data manipulated by the map operation. Code in the reduce function can be used to implement operations that correspond roughly to SQL's ORDER BY, SORT, and aggregation features.
Couchbase Server supplies built-in reduce functions: _count, _stats, and _sum. These built-in functions are optimized beyond what would be possible if written from scratch. For example, the _count function (which counts the number of rows returned by the map function) doesn't have to recount all the documents when called. If an item is added to or removed from the associated index,
the count is incremented or decremented appropriately, so the _count function need merely retrieve the maintained value.
Query parameters offer further filtering of an index. For example, you can use query parameters to define a query that returns
a single entry or a specified range of entries from within an index. In addition, in Couchbase 2.0, document metadata is available.
The usefulness of this becomes apparent when building mapreduce functions, as the map function can employ metadata to filter documents based on parameters such as expiration date and revision number.
Couchbase indexes are updated incrementally. That is, when an index is updated, it's not reconstructed wholesale. Updates only involve those documents that have been changed or added or removed since the last time the index was updated. You can configure an index to be updated when specific circumstances occur. For example, you might configure an index to be updated whenever a query is issued against it. That, however, might be computationally expensive, so an alternative is to configure the index to be updated only after a specified number of documents within the view have been modified. Still another alternative is to have the view updated based on a time interval.