Maestro
Maestro

Reputation: 9508

Get the last documents?

CouchDB has a special _all_docs view, which returns documents sorted on ID. But as ID's are random by default, the sorting makes no sense.

I always need to sort by 'date added'. Now I have two options:

  1. Generating my own ID's and make sure they start with a timestamp
  2. Use standard GUID's, but add a timestamp in json, and sort on that

Now the second solution is less hackish, but I suspect the first solution to be much more efficient and faster, because all queries will be done on the real row id, which is indexed.

Is it true that both solutions differ in performance? And if it's true, which one is likely to be faster or preferred?

Upvotes: 1

Views: 494

Answers (1)

Ingo Radatz
Ingo Radatz

Reputation: 1225

Is it true that both solutions differ in performance?

Your examples given describing the primary and secondary index approach in CouchDB.

_all_docs is the only primary index and is always up-to-date. Secondary indexes (views) as in your second solution getting updated when they are requested.

Thats the reason why from the requesters point-of-view _all_docs might be "faster". In real there isn't a difference in requesting already up-to-date indexes. Two workarounds for potentially outdated views (secondary indexes) are the use of the query param stale=ok (update the view after the response to the request) or so called "view-heaters" (send a simple HTTP Get to the view to trigger the update process).

And if it's true, which one is [...] prefered?

The capabilities to build an useful index and response payload are significant higher on the side of secondary indexes.

When you want to use the primary index you have to "design" your id as you have described. You can imagine that is a huge pre-decision of what can also be done with the doc and the ids.

My recommendation would be to use secondary indexes (views). Only if you need data stored in real-time or high-concurrency scenarios you should include the primary index in the search for the best fit to request data.

Upvotes: 3

Related Questions