Return-Path: X-Original-To: apmail-couchdb-user-archive@www.apache.org Delivered-To: apmail-couchdb-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8D1C510426 for ; Thu, 15 Aug 2013 07:23:14 +0000 (UTC) Received: (qmail 89482 invoked by uid 500); 15 Aug 2013 07:23:12 -0000 Delivered-To: apmail-couchdb-user-archive@couchdb.apache.org Received: (qmail 89083 invoked by uid 500); 15 Aug 2013 07:23:11 -0000 Mailing-List: contact user-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@couchdb.apache.org Delivered-To: mailing list user@couchdb.apache.org Received: (qmail 89075 invoked by uid 99); 15 Aug 2013 07:23:10 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Aug 2013 07:23:10 +0000 X-ASF-Spam-Status: No, hits=1.5 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of jason.h.smith@gmail.com designates 209.85.219.54 as permitted sender) Received: from [209.85.219.54] (HELO mail-oa0-f54.google.com) (209.85.219.54) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Aug 2013 07:23:03 +0000 Received: by mail-oa0-f54.google.com with SMTP id o6so443046oag.13 for ; Thu, 15 Aug 2013 00:22:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:content-type; bh=cnrV0znW1ZkbyYt1RPLjSeCB/DodYQsaQkd/QLdJ+Fs=; b=MFhJdn0uNhXot94lXDxjGhAvlh1K28Zi1iEdKfhChdbE6N3ftalRafLu8qhlONoZUu jJnN2Jm9u1K2+CJWfYVk1sIulCL8DaoK2aG2PNZSW1ZJWN2Cc7bbilwAp4Gmm8svZxKl BdbZ0q+cvUtK/zjJ9hzxM9Dlm2tSkE5GHsHNmrLUhRnEQ7egX3ww5wm073l1W2iPxL2Z QikR5reTQs3t1MSwWrv2FvjdB9gTGiHZLPCXV6x8DD1qNiLNenpgK1hQjuAKdroEu6Di N/l6mntakMfrwIuijE6x/ObjzVK1jeINchvow/vdGaKYc2lIH0pogR/wIRn5U5xsgyS6 6I0g== X-Received: by 10.60.60.5 with SMTP id d5mr13209137oer.0.1376551362722; Thu, 15 Aug 2013 00:22:42 -0700 (PDT) MIME-Version: 1.0 Sender: jason.h.smith@gmail.com Received: by 10.182.103.133 with HTTP; Thu, 15 Aug 2013 00:22:22 -0700 (PDT) In-Reply-To: References: From: Jason Smith Date: Thu, 15 Aug 2013 14:22:22 +0700 X-Google-Sender-Auth: VN8iXSlCcJT1jOLhoHuPcEgSiRo Message-ID: Subject: Re: Erlang vs JavaScript To: "user@couchdb.apache.org" Content-Type: multipart/alternative; boundary=089e0149c3c0fd81d304e3f7564c X-Virus-Checked: Checked by ClamAV on apache.org --089e0149c3c0fd81d304e3f7564c Content-Type: text/plain; charset=UTF-8 Yes, to a first approximation, with a native view, CouchDB is basically running eval() on your code. In my example, I took advantage of this to build a nonstandard response to satisfy an application. (Instead of a 404, we sent a designated fallback document body.) But, if you accumulate the list in a native view, a JavaScript view, or a hypothetical Erlang view (i.e. a subprocess), from the operating system's perspective, the memory for that list will be allocated somewhere. Either the CouchDB process asks for X KB more memory, or its subprocess will ask for it. So I think the total system impact is probably low in practice. So I guess my point is not that native views are wrong, just they have a cost so you should weigh the cost/benefit for your own project. In the case of manage_couchdb, I wrote a JavaScript implementation; but since sometimes I have an emergency and I must find conflicts ASAP, I made an Erlang version because it is worth it. On Thu, Aug 15, 2013 at 2:05 PM, Stanley Iriele wrote: > Whoa...OK...that I had no idea about...thanks for taking the time to go to > that granularity, by the way. > > So does this mean that the process memory is shared? As apposed to living > in its own space?.so if someone accumulates a large json object in a list > function its chewing up couchdb's memory?... I guess I'm a little confused > about what's in the same process and what isn't now > On Aug 14, 2013 11:57 PM, "Jason Smith" wrote: > > > To me, an Erlang view is a view server which supports map, reduce, show, > > update, list, etc. functions in the Erlang language. (Basically it is > > implemented in Erlang.) > > > > A view server is a subprocess that runs beneath CouchDB which > communicates > > with it over standard i/o. It is a different process in the operating > > system and only interfaces with the main server using the view server > > protocol (basically a bunch of JSON messages going back and forth). > > > > I do not know of an Erlang view server which works well and is currently > > maintained. > > > > A native view (shipped by CouchDB but disabled by default) is some > > corner-cutting. Code is evaluated directly by the primary CouchDB server. > > Since CouchDB is Erlang, the native query server is necessarily Erlang. > The > > key difference is, your code is right there in the eye of the storm. You > > can call couch_server:open("some_db") and completely circumvent security > > and other invariants which CouchDB enforces. You can leak memory until > the > > kernel OOM killer terminates CouchDB. It's not about the language, it's > > that is is running inside the CouchDB process. > > > > > > > > On Thu, Aug 15, 2013 at 1:36 PM, Stanley Iriele > >wrote: > > > > > Wait....I'm a tad confused here..Jason what is the difference between > > > native views and Erlang views?... > > > On Aug 14, 2013 11:16 PM, "Jason Smith" wrote: > > > > > > > Oh, also: > > > > > > > > They are **not** Erlang views. They are **native** views. We should > > > > emphasize the latter to remind ourselves about the security and > > > reliability > > > > risks which Bob identifies. > > > > > > > > They are very powerful, but it is a trade-off. Once I had a customer > > who > > > > had a basic "class" document describing common values. All other > > > documents > > > > were for modifications to the "base class" so to speak. He needed to > > > query > > > > by document ID, but if no such document existed, return the "base > > class" > > > > document instead. The product was already in the field and so the > code > > > > could not change. We had to change it in CouchDB. > > > > > > > > The fix was very simple: a _rewrite rule to a native _show function. > In > > > the > > > > show function, if the Doc was null, then we used the internal CouchDB > > API > > > > to fetch the default document. Voila. > > > > > > > > > > > > On Thu, Aug 15, 2013 at 1:08 PM, Jason Smith wrote: > > > > > > > > > On Thursday, August 15, 2013, Andrey Kuprianov wrote: > > > > > > > > > >> Doesnt server performance downgrade, while views are being > rebuilt? > > So > > > > the > > > > >> faster they are rebuilt, the better for you. > > > > > > > > > > > > > > > If my view build would degrade total performance to cross an > > > unacceptable > > > > > threshold, then I am really riding the line! What about an > unplanned > > > > > compaction? What if one day the clients have a bug and load > > increases? > > > > What > > > > > if an unplanned disaster happens and a backup must be performed > > > urgently? > > > > > > > > > > I would evaluate view performance in the larger context of the > entire > > > > > application life cycle. > > > > > > > > > > Men seem to want to date beautiful women. It is a very high > priority > > at > > > > > the pub or whatever. But long-married men do not even think about > > their > > > > > wife's attractiveness because that is a small, superficial part of > a > > > much > > > > > larger story. > > > > > > > > > > > > > > >> > > > > >> Besides, looks like it's possible to do the same 3 steps with > design > > > doc > > > > >> views created in Erlang? Or is it just about using require() in > > > Node.js? > > > > >> > > > > > > > > > > Actually, yes that is a fine point. I myself prefer Node.js but > > anyone > > > > can > > > > > choose the best fit for them. > > > > > > > > > > And speaking more broadly, CouchDB is a very flexible platform so > it > > is > > > > > quite likely that my own policies do not apply to every use case. > In > > > fact > > > > > if I'm honest I use native views myself, usually for unplanned > > > > > troubleshooting, I want to find conflicts so I use manage_couchdb: > > > > > http://github.com/iriscouch/manage_couchdb > > > > > > > > > > My main point is, anybody time somebody says "performance" ask > > yourself > > > > if > > > > > it is really a "performance siren." Earlier in this thread, Jens > > raises > > > > > some examples of plausible true performance requirements, not just > > > siren > > > > > songs. > > > > > > > > > > > > > > > --089e0149c3c0fd81d304e3f7564c--