Awesome. Thanks Robert On Saturday, 13 February 2016, Robert Kowalski <[email protected]> wrote:
> the new behaviour for mango landed this week on master, i hope you all > enjoy it! > > please report any bugs, problems, feedback and also praise :) > > On Mon, Jan 18, 2016 at 11:59 AM, Jan Lehnardt <[email protected] > <javascript:;>> wrote: > > This is awesome: +1 > > > > > >> On 18 Jan 2016, at 00:16, Robert Kowalski <[email protected] > <javascript:;>> wrote: > >> > >> Heya, > >> > >> thanks again for all the feedback! I built a prototype and added a demo > video! > >> > >>> I think the current design constraint around text is a good one, and > I'm > >>> unconvinced including English text is a good direction. > >>> > >>> If you want to take this direction, including a URL to our > documentation > >>> instead (which *is* internationalized) is probably a better way to go, > >>> something like: > >>> .... {"_warning": "http://docs.couchdb.org/en/2.0.0/.....”}] > >> > >> I really like this idea! I thought long about it and I think it grows > >> the scope of the current task. Right now all strings CouchDB returns > >> to the user are written in English. The current message that no index > >> exists is also in english. Sadly our documentation is not > >> internationalised yet - afaik no language has a complete translation > >> and the translations are not available as a website or in any other > >> public form. I stopped translating to German myself as the promised > >> integration into the doc build was never finished in ~1.5 years. For > >> the specific task right now I would like to keep the scope as small as > >> possible. This does not mean that I would stand in the way if folks > >> want to add i18n to the project and its sub-projects and have the > >> tooling and time to maintain it. > >> > >> > >> Because a prototype speaks more than 1000 posts I hacked a prototype > >> which includes the warning that was proposed by Garren. You can check > >> it out at https://github.com/apache/couchdb-mango/pull/27 - or watch > >> the video: https://cloudup.com/cEnbWqbX5Y7 > >> > >> What do you think? > >> > >> On Wed, Jan 13, 2016 at 11:58 PM, Jan Lehnardt <[email protected] > <javascript:;>> wrote: > >>> > >>>> On 13 Jan 2016, at 23:41, Joan Touzet <[email protected] > <javascript:;>> wrote: > >>>> > >>>> Warning: If we start using English text in a response such as this, > we'll > >>>> need to start externalising strings and internationalising them. > We've never > >>>> had to do this before because our API is, in general, terse and > relies on > >>>> HTTP status codes to indicate when something has gone wrong. > >>>> > >>>> I think the current design constraint around text is a good one, and > I'm > >>>> unconvinced including English text is a good direction. > >>>> > >>>> If you want to take this direction, including a URL to our > documentation > >>>> instead (which *is* internationalized) is probably a better way to go, > >>>> something like: > >>>> > >>>> .... {"_warning": "http://docs.couchdb.org/en/2.0.0/.....”}] > >>> > >>> bikeshed: maybe slow_warning (like we use not_found on 404s), but yeah, > >>> something like this! > >>> > >>> Great discussion everyone. I like how we are all making this idea > better together :) > >>> > >>> Best > >>> Jan > >>> -- > >>> > >>> > >>> > >>>> > >>>> > >>>> > >>>> ----- Original Message ----- > >>>> From: "Robert Kowalski" <[email protected] <javascript:;>> > >>>> To: [email protected] <javascript:;> > >>>> Sent: Wednesday, January 13, 2016 2:47:27 PM > >>>> Subject: Re: [POC] Mango Catch All Selector > >>>> > >>>> Hi Garren, > >>>> > >>>> what would selector: null do? Return all docs? > >>>> > >>>> Where in the answer from CouchDB would be the warning? Next to the > >>>> resultset, like > >>>> > >>>> [{"_id": "foo", "_rev": "535"}, {"_warning": "slow query, use an > index for > >>>> better performance"}] ? > >>>> > >>>> Am Mittwoch, 13. Januar 2016 schrieb Garren Smith : > >>>> > >>>>> Hi Robert, > >>>>> > >>>>> I think you miss understood me, I don’t want it to be a different > endpoint. > >>>>> I just don’t want a user to have to do queries like this find({slow: > >>>>> true}). I want them to be able to do a query e.g. find({}) or > >>>>> find({selector: null}) and then get back the results along with a > warning > >>>>> message telling them that this query would be slow in production. > >>>>> The lower the barrier for entry here the better. I know we want to > protect > >>>>> our users for when they go to production, but forcing them to add a > slow: > >>>>> true flag won’t help. It will still require them to read the docs a > lot > >>>>> more than most people are willing to on a first attempt of something > new. > >>>>> > >>>>> Cheers > >>>>> Garren > >>>>>> On 12 Jan 2016, at 9:16 PM, Robert Kowalski <[email protected] > <javascript:;> > >>>>> <javascript:;>> wrote: > >>>>>> > >>>>>> thank you all for your feedback! > >>>>>> > >>>>>> i like the idea of the error message with a new url. > >>>>>> > >>>>>> i agree with garren that it should be a separate endpoint. it takes > >>>>>> some complexity off when explaining each endpoint. > >>>>>> > >>>>>> maybe: `/_find_slow`? > >>>>>> > >>>>>> On Tue, Jan 12, 2016 at 10:36 AM, Jan Lehnardt <[email protected] > <javascript:;> > >>>>> <javascript:;>> wrote: > >>>>>>> > >>>>>>>> On 11 Jan 2016, at 19:55, Tony Sun <[email protected] > <javascript:;> > >>>>> <javascript:;>> wrote: > >>>>>>>> > >>>>>>>> Hi Robert, > >>>>>>>> > >>>>>>>> Building upon what others have stated above, what do you think > about > >>>>>>>> the following: > >>>>>>>> > >>>>>>>> 1) Let the user query without creating an index > >>>>>>>> 2) Return an error message with a new url that has > >>>>>>>> "slow/no_index/developer":true appended at the end. The message > clearly > >>>>>>>> explains that this query will be slow, and that creating an index > will > >>>>> be > >>>>>>>> more efficient. However, he or she can continue. The error > message will > >>>>>>>> then have a link to point to our documentation. > >>>>>>>> 3) In Fauxton, there is a checkbox or button that also appends the > >>>>>>>> "slow/no_index/developer":true to the _find url. If the user > clicks it, > >>>>>>>> then the same message pops up to notify the user. > >>>>>>> > >>>>>>> > >>>>>>> I like this! > >>>>>>> > >>>>>>> > >>>>>>> Jan > >>>>>>> -- > >>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> Tony > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Mon, Jan 11, 2016 at 9:45 AM, Eli Stevens (Gmail) < > >>>>> [email protected] <javascript:;> <javascript:;>> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Just wanted to chime in here as a user - I've run into similar > >>>>>>>>> behavior from CouchDB with the reduce-not-reducing-enough > heuristic, > >>>>>>>>> where stuff I was working on went smoothly in dev, but stopped > once > >>>>>>>>> real load was pushed through it (thankfully for me, that was in > >>>>>>>>> testing, rather than released to customers). > >>>>>>>>> > >>>>>>>>> It's a frustrating experience, and I don't think that a > reputation for > >>>>>>>>> "works until you cross a threshold, and then it doesn't, but > only in > >>>>>>>>> production" is a good thing to move towards. > >>>>>>>>> > >>>>>>>>> Perhaps something like adding a key to the returned data along > the > >>>>>>>>> lines of "_slow_warning": "This query is going to be slow on > large > >>>>>>>>> data sets. See http://..." in addition to the ?slow_warning=true > >>>>> query > >>>>>>>>> param (note that I'm calling it "slow_warning" in both places > only to > >>>>>>>>> increase discoverability; without the url param, the no-index > query > >>>>>>>>> wouldn't work at all). Bikeshed the name as needed. > >>>>>>>>> > >>>>>>>>> I'd like to see a lot more URLs in CouchDB error messages in > general, > >>>>>>>>> actually - I would find it very useful when trying to determine > what's > >>>>>>>>> going wrong to have a URL right there in the logs that I can get > more > >>>>>>>>> information from. > >>>>>>>>> > >>>>>>>>> On Sun, Jan 10, 2016 at 11:54 AM, Joan Touzet <[email protected] > <javascript:;> > >>>>> <javascript:;>> wrote: > >>>>>>>>>> Hi Robert, > >>>>>>>>>> > >>>>>>>>>> I've been thinking about this one for the week or so, and I > have a > >>>>>>>>>> simple suggestion: > >>>>>>>>>> > >>>>>>>>>> Add the query parameter slow=true to enable this behaviour. > >>>>>>>>>> > >>>>>>>>>> This meets all the original requirements: > >>>>>>>>>> > >>>>>>>>>> 1. It is not default behaviour > >>>>>>>>>> 2. You can grep the log files for the word 'slow' and find > evidence > >>>>>>>>>> 3. There is a shorthand, simple way to enable the behaviour > >>>>>>>>>> 4. Any self-respecting developer will try to remove slow=true, > find > >>>>>>>>>> a break, and be forced to learn about indexes > >>>>>>>>>> 5. It's a bit cheeky, which I think is kind of fun :D > >>>>>>>>>> > >>>>>>>>>> All the best, > >>>>>>>>>> Joan > >>>>>>>>>> > >>>>>>>>>> ----- Original Message ----- > >>>>>>>>>>> From: "William Edney" <[email protected] > <javascript:;> <javascript:;>> > >>>>>>>>>>> To: [email protected] <javascript:;> <javascript:;> > >>>>>>>>>>> Sent: Friday, January 8, 2016 10:27:29 AM > >>>>>>>>>>> Subject: Re: [POC] Mango Catch All Selector > >>>>>>>>>>> > >>>>>>>>>>> Hi Robert - > >>>>>>>>>>> > >>>>>>>>>>> As a builder of UI, API and library code who has also done > developer > >>>>>>>>>>> training on a variety of technologies, one simple fix might be > go > >>>>>>>>>>> ahead and > >>>>>>>>>>> not require indexes to be built, but then to put a big NOTE at > the > >>>>>>>>>>> beginning of the "Mango Getting Started" guide (I would assume > there > >>>>>>>>>>> is > >>>>>>>>>>> such a piece of documentation) that states: "Note that the > examples > >>>>>>>>>>> in this > >>>>>>>>>>> document do not require you to build an index, but for > performance > >>>>>>>>>>> reasons > >>>>>>>>>>> we HIGHLY RECOMMEND that you do so. *Click here* for more > >>>>> information > >>>>>>>>>>> about > >>>>>>>>>>> how to do that" (or some such verbiage). > >>>>>>>>>>> > >>>>>>>>>>> My 2 cents. > >>>>>>>>>>> > >>>>>>>>>>> Cheers, > >>>>>>>>>>> > >>>>>>>>>>> - Bill > >>>>>>>>>>> > >>>>>>>>>>> On Fri, Jan 8, 2016 at 9:04 AM, Robert Kowalski < > [email protected] <javascript:;> > >>>>> <javascript:;>> > >>>>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Hi list, > >>>>>>>>>>>> > >>>>>>>>>>>> At the end of the mail I would like to invite the other folks > from > >>>>>>>>>>>> the > >>>>>>>>>>>> mailing list that build interfaces for humans (APIs, CLIs or > even > >>>>>>>>>>>> UIs) > >>>>>>>>>>>> to chime in again with their opinions. So all people one the > ML, > >>>>>>>>>>>> the > >>>>>>>>>>>> mail is not just a response to Paul, feedback is welcome :) > >>>>>>>>>>>> > >>>>>>>>>>>> Hi Paul, I agree with the timeout. It could lead to very > unpleasant > >>>>>>>>>>>> errors which are hard to debug and support. > >>>>>>>>>>>> > >>>>>>>>>>>> I added some thoughts to the other points you made: > >>>>>>>>>>>> > >>>>>>>>>>>>> a) know that the slow queries logs exist, > >>>>>>>>>>>> > >>>>>>>>>>>> Hmm... If I take a look at the 1.x logging it was very > >>>>>>>>>>>> straightforward. As a developer you would spin up a CouchDB > and you > >>>>>>>>>>>> get all the log messages into your terminal. It was quite > handy in > >>>>>>>>>>>> general for all kind of debugging. That the logs are not > displayed > >>>>>>>>>>>> directly on stdout/stderr is in my opinion a general 2.x > problem. > >>>>>>>>>>>> The > >>>>>>>>>>>> problem does occur with all kinds of log message we produce in > >>>>>>>>>>>> CouchDB > >>>>>>>>>>>> for 2.x and is not specific to the slow-query-logging. > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> Ie, "You can try queries with testing:true, when you're > ready to > >>>>>>>>>>>>> move to > >>>>>>>>>>>> production you can > >>>>>>>>>>>>> POST your selector to _index to create the index which > allows you > >>>>>>>>>>>>> to > >>>>>>>>>>>>> remove testing:true". > >>>>>>>>>>>> > >>>>>>>>>>>> I really like the migration path you mentioned here with the > API to > >>>>>>>>>>>> create indexes. I am worried to have a too high entry barrier > for > >>>>>>>>>>>> absolute newcomers, people that you want to play around > before they > >>>>>>>>>>>> are ready to think about indexes, e.g. by putting coupling the > >>>>>>>>>>>> index > >>>>>>>>>>>> topic from the beginning to the querying. > >>>>>>>>>>>> > >>>>>>>>>>>> When I throw too much things to learn on people (which may > not > >>>>>>>>>>>> have > >>>>>>>>>>>> used a database before), most people get discouraged and does > not > >>>>>>>>>>>> take > >>>>>>>>>>>> a look. The usual things they feel or say are : "too > complicated", > >>>>>>>>>>>> "I > >>>>>>>>>>>> have not enough time", "product XY is easier to use". > >>>>>>>>>>>> > >>>>>>>>>>>> I would argue that newcomers to a database will launch a high > >>>>>>>>>>>> traffic, > >>>>>>>>>>>> multi-gigabyte product with the database from day one. Day > one is > >>>>>>>>>>>> the > >>>>>>>>>>>> day where they learn how to query the data and put data into > the > >>>>>>>>>>>> database. Even for scenarios where people have a running high > >>>>>>>>>>>> traffic > >>>>>>>>>>>> system, and have used other databases at a medium to large > scale I > >>>>>>>>>>>> would expect given they migrate to Couch, that they run both > >>>>>>>>>>>> systems > >>>>>>>>>>>> in parallel for the first time in order to fix the issues that > >>>>>>>>>>>> occur > >>>>>>>>>>>> during a migration. > >>>>>>>>>>>> > >>>>>>>>>>>> I think we we share the same goal (getting beginners started > >>>>>>>>>>>> quickly) > >>>>>>>>>>>> and the cool thing about your suggestion is that everyone > gets the > >>>>>>>>>>>> required knowledge to run a production system right from the > very > >>>>>>>>>>>> start. My suggestion leaves some parts out, but reduces the > >>>>>>>>>>>> cognitive > >>>>>>>>>>>> load required to get the very first basic results, e.g. in a > >>>>>>>>>>>> university class setting - or junior developers on their > "casual > >>>>>>>>>>>> friday 20% time". My big hope is, once those folks build high > >>>>>>>>>>>> traffic > >>>>>>>>>>>> systems, they remember how easy the usage of CouchDB was and > that > >>>>>>>>>>>> they > >>>>>>>>>>>> start to learn more about CouchDB in order to run it in a > system > >>>>>>>>>>>> with > >>>>>>>>>>>> more than a few thousand documents. > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> For us both I think the "what" is clear, but the "how" is a > bit > >>>>>>>>>>>> different. I also think this discussion still makes progress, > but I > >>>>>>>>>>>> am > >>>>>>>>>>>> afraid it could stall. I see that we both have very good > rudiments > >>>>>>>>>>>> and > >>>>>>>>>>>> I would like to invite the other folks from the mailing list > that > >>>>>>>>>>>> build interfaces for humans (APIs, CLIs or even UIs) to chime > in > >>>>>>>>>>>> again > >>>>>>>>>>>> with their opinions - of course I'm also looking forward to > your > >>>>>>>>>>>> answer :) > >>>>>>>>>>>> > >>>>>>>>>>>> Best, > >>>>>>>>>>>> Robert :) > >>>>>>>>>>>> > >>>>>>>>>>>> On Wed, Jan 6, 2016 at 6:21 PM, Paul Davis > >>>>>>>>>>>> <[email protected] <javascript:;> <javascript:;>> > >>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>> - is a timeout solving the root cause or the symptoms? > Could it > >>>>>>>>>>>>>>> be a > >>>>>>>>>>>>>>> temporary or additional step as in conjunction with query > >>>>>>>>>>>>>>> optimisation > >>>>>>>>>>>>>>> tooling? > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> It really depends. From my CouchDB admin and user > perspective, > >>>>>>>>>>>>>> this > >>>>>>>>>>>>>> doesn't seem so important to me right now. However, I > recognize > >>>>>>>>>>>>>> that > >>>>>>>>>>>>>> there are different usage scenarios with different > requirents > >>>>>>>>>>>>>> (e.g. the > >>>>>>>>>>>>>> ones at Cloudant). > >>>>>>>>>>>>> > >>>>>>>>>>>>> I don't think there's anything special about Cloudant in this > >>>>>>>>>>>>> discussion. Its just a question of how do we allow new users > the > >>>>>>>>>>>>> ability to easily test and learn the selector/query API while > >>>>>>>>>>>>> also > >>>>>>>>>>>>> preventing them from going too far without creating indexes > for > >>>>>>>>>>>>> their > >>>>>>>>>>>>> queries. The slow queries messages are fine, but just as any > >>>>>>>>>>>>> other > >>>>>>>>>>>>> database they don't really prompt the developer to make the > >>>>>>>>>>>>> correct > >>>>>>>>>>>>> change. Ie, the developer has to be savvy enough to a) know > that > >>>>>>>>>>>>> the > >>>>>>>>>>>>> slow queries logs exist, b) understand that creating an index > >>>>>>>>>>>>> would > >>>>>>>>>>>>> speed things up, and then c) know which index to create > based on > >>>>>>>>>>>>> the > >>>>>>>>>>>>> logged query. > >>>>>>>>>>>>> > >>>>>>>>>>>>> In my experience, the group of users that we're concerned > about > >>>>>>>>>>>>> in > >>>>>>>>>>>>> this discussion most likely don't know about any of those > three > >>>>>>>>>>>>> things, hence why the current API is designed to force them > to > >>>>>>>>>>>>> learn > >>>>>>>>>>>>> about and understand indexes as part of learning the API. > Granted > >>>>>>>>>>>>> the > >>>>>>>>>>>>> `_id > null` trick muddies that learning process. I would > think > >>>>>>>>>>>>> that > >>>>>>>>>>>>> replacing the _id trick with `"testing": true` or similar > would > >>>>>>>>>>>>> be an > >>>>>>>>>>>>> obvious indication to users that this is a dev/debug type > feature > >>>>>>>>>>>>> and > >>>>>>>>>>>>> when they went to production they would still be pushed to > using > >>>>>>>>>>>>> an > >>>>>>>>>>>>> index. If we add the "create index from selector" API then I > >>>>>>>>>>>>> think > >>>>>>>>>>>>> this would be a relatively straightforward method to on > ramping > >>>>>>>>>>>>> to > >>>>>>>>>>>>> both the query and index sides of the API. Ie, "You can try > >>>>>>>>>>>>> queries > >>>>>>>>>>>>> with testing:true, when you're ready to move to production > you > >>>>>>>>>>>>> can > >>>>>>>>>>>>> POST your selector to _index to create the index which > allows you > >>>>>>>>>>>>> to > >>>>>>>>>>>>> remove testing:true". > >>>>>>>>>>>>> > >>>>>>>>>>>>> That's also why I don't particularly care for the timeout > >>>>>>>>>>>>> approach. > >>>>>>>>>>>>> It's a binary threshold that a user would (maybe) meet after > some > >>>>>>>>>>>>> unknown amount of time after they falsely believe their app > is > >>>>>>>>>>>>> working > >>>>>>>>>>>>> correctly. The feedback is "Everything is fine until it > isn't". > >>>>>>>>>>>>> Consider an app that's been working for a week or a month or > more > >>>>>>>>>>>>> that > >>>>>>>>>>>>> suddenly starts throwing timeouts for a query. From the > user's > >>>>>>>>>>>>> perspective the database broke because the query that used to > >>>>>>>>>>>>> work > >>>>>>>>>>>>> fine no longer does. And then there's the follow on question > on > >>>>>>>>>>>>> how > >>>>>>>>>>>>> that timeout might instruct the user that they need an > index, and > >>>>>>>>>>>>> that > >>>>>>>>>>>>> the fix may be as easy as POSTing their selector to the > _index > >>>>>>>>>>>>> endpoint. Sure Google would most likely have the answer if > our > >>>>>>>>>>>>> docs > >>>>>>>>>>>>> are good enough, but by that point the developer is probably > >>>>>>>>>>>>> already > >>>>>>>>>>>>> experiencing downtime if their app is live which means > they're > >>>>>>>>>>>>> frantically trying to fix the thing. From my point of view, > a few > >>>>>>>>>>>>> road > >>>>>>>>>>>>> blocks that guide developers towards the correct usage early > on > >>>>>>>>>>>>> would > >>>>>>>>>>>>> be better than letting them get to the adrenaline fueled > >>>>>>>>>>>>> expletive > >>>>>>>>>>>>> fountain of downtime. > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>> > >>>>>>> > >>>>> > >>>>> > >>> > > >
