Return-Path: Delivered-To: apmail-cassandra-dev-archive@www.apache.org Received: (qmail 10873 invoked from network); 29 Oct 2010 10:07:13 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 29 Oct 2010 10:07:13 -0000 Received: (qmail 12310 invoked by uid 500); 29 Oct 2010 10:07:12 -0000 Delivered-To: apmail-cassandra-dev-archive@cassandra.apache.org Received: (qmail 12295 invoked by uid 500); 29 Oct 2010 10:07:12 -0000 Mailing-List: contact dev-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list dev@cassandra.apache.org Received: (qmail 12287 invoked by uid 99); 29 Oct 2010 10:07:12 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 29 Oct 2010 10:07:12 +0000 X-ASF-Spam-Status: No, hits=4.7 required=10.0 tests=FREEMAIL_FROM,FREEMAIL_REPLY,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of vladimir.vivien@gmail.com designates 209.85.214.44 as permitted sender) Received: from [209.85.214.44] (HELO mail-bw0-f44.google.com) (209.85.214.44) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 29 Oct 2010 10:07:08 +0000 Received: by bwz12 with SMTP id 12so2548234bwz.31 for ; Fri, 29 Oct 2010 03:06:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:content-type; bh=tYzJCyqm3I8YTYrXR+PigqJr5eCBX3ev1Cjkt4E58Qo=; b=mY4CuyMWnILn547B3dV7eTp41/OlIN70Zp8AXoiOtcou1IOoiFc6hK6dBhmEvTTBS9 J4Gha1KakPXsL2lSK3PiVJTky+LMyuLSu756sk1K6UNw8QE9aVk6NNlzHuEkNlFcszfN h1ZOXfOjZad2eH8xTtxnGSRuQYxbQweOOyL9Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=AAtdR/ZvwyZghQHwIdwCU6Qf7SNrnPZEc4Fq/91Zpa6ngtS9Atnvp/fBEDe3+YbwLZ oQw452Jn6rMMz9FFneprQo8b+MsJbxN2+a4mBf2n/hy8cdlagPuJ34ZSTHj78ohnOa3H ElO+t4YiVmYcrHw/Y+3U0KeVro4JOvTfIw29U= MIME-Version: 1.0 Received: by 10.204.117.199 with SMTP id s7mr9741358bkq.15.1288346805891; Fri, 29 Oct 2010 03:06:45 -0700 (PDT) Received: by 10.204.102.16 with HTTP; Fri, 29 Oct 2010 03:06:45 -0700 (PDT) In-Reply-To: References: <1288298407.5962.25.camel@erebus.lan> Date: Fri, 29 Oct 2010 06:06:45 -0400 Message-ID: Subject: Re: NoSQL, YesCQL? From: Vladimir Vivien To: dev@cassandra.apache.org Content-Type: multipart/alternative; boundary=0016e6d64816b670da0493be9df4 --0016e6d64816b670da0493be9df4 Content-Type: text/plain; charset=ISO-8859-1 How about something simpler/more approachable such as a query api that hides away the drudgery of thrift/avro rpc api? On Fri, Oct 29, 2010 at 12:56 AM, Vincent Maher wrote: > Hi all > > I think this is a great idea. If you take out Thrift, which is where > the bulk of the n00b installation pain lies, and add a query language > and a PHP extension then I think Cassandra will go mainstream. > > I still need to write a proper blog post for the team but just so you > all know, we're happily using Cassie for all sorts of stuff on > Motribe at the moment. The work you are doing is changing lives, bit > by bit, and many more people appreciate it than you realise. > > Kind regards, > _________________________________ > > Vincent Maher > Founder, Motribe > http://motribe.com && http://motribe.mobi > > "Accidents don't happen to people who take accidents as a personal > insult" - Don Corleone > > Blogs: http://www.vincentmaher.com > Facebook: http://www.facebook.com/vincentmaher > Twitter: http://www.twitter.com/vincent_maher > > Mobile: +27 82 998 5412 > Google Talk: flobby1@gmail.com > Skype Name: vincentmaher > > > > > On Thu, Oct 28, 2010 at 10:40 PM, Eric Evans wrote: > > > > I don't know about everyone else, but I've been pretty dissatisfied with > > our API situation for some time. > > > > I used to be of the opinion that The Problem was Thrift and The Answer > > was Avro. I do still prefer Avro over Thrift as dependencies go, but > > I've come to the conclusion that the real problem has more to do with > > the object-oriented RPC pattern that both share in common. > > > > I used to think this was a necessary burden in order to expose the full > > power of our query API in a client agnostic manner, and that it was the > > job of third-party libraries to wrap this layer to create stable > > idiomatic interfaces. > > > > And, I used to think a vibrant ecosystem of these idiomatic libraries > > would emerge, but it hasn't. Truth is we've seen quite a bit of > > proliferation, and very little critical mass. > > > > This shouldn't be construed as criticism levied against library > > maintainers, on the contrary, I think they've done an amazing job all > > things considered. But in my opinion, our RPC interfaces push way too > > many implementation details client-side, making them brittle and > > unstable. This results in unnecessarily complex libraries that are > > forced to move in lock-step with Cassandra releases, that are never > > backward compatible, and which are consistently broken during our > > development cycle. I think we can provide client maintainers and users > > with a better experience than this. > > > > One solution to this is to implement a server-side query language, with > > simple language drivers that manage all of the common functionality in a > > consistent way (statement preparation, connection pooling, etc). > > Library maintainers would then build their idiomatic interfaces on top > > of these, (and I imagine, remove a metric crap-ton of code in the > > process). > > > > To this end I've been playing with exactly that. I have enough to do > > simple reads and writes, and I have stubbed out drivers for Java and > > Python. I'm seeking community feedback to gauge interest, and to > > satisfy the much needed desire to bike-shed. :) > > > > http://github.com/eevans/cassandra/tree/CQL > > > > You need to be sure you're checking out the "CQL" branch. > > > > This is implemented in the Avro interface so you'll need to pass the -a > > flag when launching the daemon. > > > > It is far from complete, and is surely quite buggy at this stage, take > > it as a preview or demonstration; it's meant to be a starting point for > > discussion. > > > > There is a bit of documentation on the syntax, you can see that here: > > http://github.com/eevans/cassandra/blob/CQL/doc/cql/CQL.textile > > > > There are some system tests in test/system/test_cql.py that should give > > you the basic idea, but assuming you have the Avro Python module > > installed you should be able to just... > > > > $ cd drivers/py > > $ python > >>>> import cql > >>>> conn = cql.Connection('Keyspace1', 'localhost', 9160) > >>>> conn.execute('UPDATE Standard1 WITH ROW("k", COL("c", "hello!"));') > >>>> print conn.execute('SELECT FROM Standard1 WHERE KEY = "k"') > > [{u'columns': [{u'timestamp': 1288297508761L, u'name': 'c', u'value': > > 'hello!', u'ttl': None}], u'key': 'k'}] > >>>> > > > > > > I've been chewing on all of this for a while so I'm brimming with ideas, > > but I'll let the dust settle on this email before going any further. :) > > > > Thoughts? > > > > > > > > P.S. Dear Cliff Moon, I apologize. You were right. > > > > -- > > Eric Evans > > eevans@rackspace.com > > > > > > > > > > > -- Vladimir Vivien --0016e6d64816b670da0493be9df4--