Thank you everyone for answering my questions. Here is the way I understand it. The first time a view is run it creates a key-values list from all documents. Future calls to the view, update the key-value list with changed documents [added, deleted, updated]. If a startkey, endkey or key is used, only those keys that match in the list are returned. If I use a different startkey, endkey or key, the key-value list is not rebuilt, it uses the keys from the first view. Did I get it right? Sorry about being obtuse. I have a project that can have over 10 million documents and I need to understand how they can be indexed. Thank you, Anthony On Apr 26, 2008, at 2:11 PM, Jan Lehnardt wrote: > Heya Anthony, > On Apr 26, 2008, at 20:50, Anthony Mills wrote: >> Maybe I missing something. When you create a view, does it create >> indexes for attributes in the database? When you add new >> documents, do they automatically create the index for the >> attributes for the view? > > A view index only has a single index which is what you send in as > the first argument in the map() function. Nothing else is going on > automatically. > > >> Also, can I call my view with soemthing like ? >> startkey=['20080403t000000', 1234]&endkey=['20080405t235959', 1234] >> to >> >> function(doc){ >> if(doc.type == "hello"){ >> map([doc.date, doc.number], doc); >> } >> } >> >> Then, through the magic of couchdb, I'll only get back those >> documents between the April 3rd and 5th whose attribute number=1234? > > Nope, you'd need a [doc.number, doc.date] index for that. It is > rather straightforward than magical. The map() function just creates > a key-value list that is sorted by key and you can query only ranges > within the key-space. > > >> Will couchdb only search through records that match the key? or >> will it need to go through all documents every time I call the view? > > To build the view index CouchDB will go through all documents. But > only once. For documents that change, get deleted or added, CouchDB > incrementally updates the index. Also, view indexes are build when > you query the view, not when you add documents. > > >> To get nerdy, I want my views to find records in O(log n) not O(n). > > You get your results in O(1) ;-) (after the first query to each view). > > In relational terms, think of a view as an index on a column without > the write penalty. So have as much as you might need. > > I hope that helps, feel free to send more questions :) > > Cheers > Jan > -- > > > >> >> >> Thanks, >> >> Anthony >> >> On Apr 26, 2008, at 1:02 AM, Chris Anderson wrote: >> >>> Anthony, >>> >>> http://wiki.apache.org/couchdb/ViewCollation is the way to >>> accomplish >>> tasks like that. >>> >>> Christopher Lenz has a write-up of how to use view collation to sort >>> views, achieving comments grouped by parent blog post. >>> >>> http://www.cmlenz.net/archives/2007/10/couchdb-joins >>> >>> In your case you could index a view with date and type, like this >>> >>> [type, date] >>> >>> and then if you had say 5 types you'd do 5 GET queries against the >>> database, each one fetching only the documents for that day. >>> >>> View collation is one of my favorite things about CouchDB. I'm >>> excited >>> about reduce, because from what I understand, you could use it to >>> lower this to 1 GET, if that's important to you. >>> >>> enjoy, >>> Chris >>> >>> On Fri, Apr 25, 2008 at 9:34 PM, Anthony Mills >> > wrote: >>>> I read most of the documentation, wiki and blogs, but I still do >>>> not see how >>>> to accomplish a certain scenario. Hopefully I can describe it >>>> adiquitely. >>>> >>>> Lets say I have 1,000,000 documents [all of the same "type"] with >>>> a date >>>> attribute. Lets say I want to pick a subset of those documents. >>>> How can I >>>> pick those documents of one type that fall on one day? Will I >>>> need to get >>>> all 1,000,000 documents? What if I want all documents of one >>>> type on one >>>> day that match another attribute? >>>> >>>> I pretty sure this is what map/reduce will help with, but is >>>> there a way to >>>> do this now? Can you use more documents to build date relations? >>>> >>>> Also, can you pass more variables than just key to >> >> >