On Thu, 14 Jan 2010 14:34:58 -0800 Tatu Saloranta <tsalora...@gmail.com> wrote: 

TS> No specific proposal, or immediate need. But I do know that such
TS> short-hand notations / languages are popular for accessing structured
TS> data (xpath/xquery, oql, even sql).

Sure.  The idea is to make Cassandra more accessible.  I'll try to
explain all my annoyances with the current API and why I think something
simpler is useful, specifically string-based queries.

IMHO the current API is confusing and hard to use.  ColumnPath,
ColumnParent, and ColumnOrSuperColumn (with the semi-included Column and
SuperColumn) are not obvious until you've tried to use them and failed
at least a few times.  SliceRange works inconsistently between Perl and
Java, to give another example: Perl only has 64-bit numbers in the
minority of compilations, so you have to jump through a lot of hoops to
specify the current time as 8 bytes.  The Java call for a null key to
indicate an unbounded range uses "null" while Perl (and Python and Ruby
IIRC) have to use the empty string '' which is most definitely not the
null value.

The majority of Cassandra users seem to be Java programmers so maybe
these issues simply haven't mattered to them and the rest have put
together libraries like Lazyboy and EasyCassandra.pm.

TS> Just wanted to mention that most opposition seemed to be against
TS> specific way to use such notation. Not so much for idea of more
TS> convenient access, as long as it uses facilities host language
TS> offers.

The Thrift API is exposed to a wide variety of languages.  You simply
can't use OO the same way in Perl and Haskell as you do in Java, to give
two examples.  They are ridiculously different and my issue, really, is
with the ugliness that results and with the awkward code I've had to
write in order to accomodate the current API in Perl.  OO through Thrift
is simply not good OO.[1]

So coming back to the query language, you either simulate OO queries,
which Thrift already does as badly as can be expected, or you drop down
to multiple strings, which IMHO is a bad compromise, or you use a single
string like most universal APIs in existence.  Hell, let's make the
query a RESTful HTTP GET, Cassandra a HTTP server, and return the data
as JSON if it's more palatable.  My point is, string queries are a
legitimate way to use structured data and not a Perl-specific thing.

Ted

[1] Thrift has encapsulation, sort of, but not inheritance or
polymorphism which are essential for OO.  From the Thrift FAQ:

"Thrift Features

Is struct inheritance supported?

No, it isn't. Thrift support inheritance of service interfaces, but only 
composition/containment for structures.

Can I overload service methods?

Nope. Method names must be unique."

Just so it's clear, I'm not blaming Thrift, it's just a transport
mechanism.  From the days of CORBA and RMI to today's efforts (Google
Protocol Buffers and Thrift among others) it's always been like this.

Reply via email to