> On 13 Jan 2016, at 23:41, Joan Touzet <[email protected]> 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/.....”}]
I like this improvement :) Best Jan -- > > > > ----- Original Message ----- > From: "Robert Kowalski" <[email protected]> > To: [email protected] > 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:;>> 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:;>> wrote: >>>> >>>>> On 11 Jan 2016, at 19:55, Tony Sun <[email protected] >> <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:;>> >>>>> 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:;>> 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:;>> >>>>>>>> To: [email protected] <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:;>> >>>>>>>> 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:;>> >>>>>>>>> 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. >>>>>>>>> >>>>>>>> >>>>>> >>>> >> >>
