cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Schubert Zhang <zson...@gmail.com>
Subject Re: Cassandra Java Client
Date Thu, 29 Apr 2010 09:19:32 GMT
Thanks!
I want have a detailed study of Hector.

On Thu, Apr 29, 2010 at 1:39 PM, Ran Tavory <rantav@gmail.com> wrote:

> Hi Schubert, I'm sorry Hector isn't a good fit for you, so let's see what's
> missing for your.
>
> On Thu, Apr 29, 2010 at 8:22 AM, Schubert Zhang <zsongbo@gmail.com> wrote:
>
>> I found hector is not a good design.
>>
>> 1. We cannot create multiple threads (each thread have a connection to
>> cassandra server) to one cassandra server.
>>     As we known, usually, cassandra client should be multiple-threads to
>> achieve good throughput.
>>
> I usually use hector with many threads, so I'm not sure I understand your
> point. Threads and connections are two different things; in hector to obtain
> a connection you call borrowClient and then you release the connection by
> releaseClient. You may choose to have one connection per thread (I think
> it's the simplest way), or many connections per thread. You may also choose
> to have many threads using the same connection, but this I think is
> less desirable and less scalable. To keep it simple, a good rule of thumb is
> connection-per-thread.
> Let me know if you have specific design questions and feel free to email
> (and join) hector-users@googlegroups.com
>

A use case as: We want one connection per thread. But a cassandra node can
provide multiple connections to one client node.


>> 2. The implementation is too fat.
>>
> Feel free to send your diet, improvements and suggestions to
> hector-dev@googlegroups.com or hector-users@googlegroups.com
>
>>
>> 3. Introduce traditional RDBMS habit into Cassandra is not a good idea.
>
> Which RDBMS habit did you mean?
>

I mean the DAO.


>
>>
>>
>> On Wed, Apr 21, 2010 at 1:25 AM, Ran Tavory <rantav@gmail.com> wrote:
>>
>>> great, I'm happy you found hector useful and reused it in your client.
>>>
>>>
>>> On Tue, Apr 20, 2010 at 5:11 PM, Dop Sun <sunht@dopsun.com> wrote:
>>>
>>>>  Hi,
>>>>
>>>>
>>>>
>>>> I have downloaded hector-0.6.0-10.jar. As you mentioned, it has good
>>>> implementation for the connection pooling, JMX counters.
>>>>
>>>>
>>>>
>>>> What I’m doing is: using Hector to create the Cassandra client (be
>>>> specific: borrow_client(url, port)). And my understanding is: in this way,
>>>> the Jassandra will enjoy the client pool and JMX counter.
>>>>
>>>>
>>>>
>>>> http://code.google.com/p/jassandra/issues/detail?id=17
>>>>
>>>>
>>>>
>>>> Please feel free to let me know if you have any suggestions.
>>>>
>>>>
>>>>
>>>> The new build 1.0.0 build 3(http://code.google.com/p/jassandra/)
>>>> created. From Jassandra client side, no API changes.
>>>>
>>>>
>>>>
>>>> Cheers~~~
>>>>
>>>> Dop
>>>>
>>>>
>>>>
>>>> *From:* Ran Tavory [mailto:rantav@gmail.com]
>>>> *Sent:* Tuesday, April 20, 2010 1:36 AM
>>>> *To:* user@cassandra.apache.org
>>>> *Subject:* Re: Cassandra Java Client
>>>>
>>>>
>>>>
>>>> Hi Dop, you may want to look at hector as a low level cassandra client
>>>> on which you build jassandra, adding hibernate style magic etc like other
>>>> ppl have done with ORM layers on top of it.
>>>>
>>>> Hector's main features include extensive jmx counters, failover and
>>>> connection pooling.
>>>>
>>>> It's available for all recent versions, including 0.5.0, 0.5.1, 0.6.0
>>>> and 0.6.1
>>>>
>>>> On Mon, Apr 19, 2010 at 5:58 PM, Dop Sun <sunht@dopsun.com> wrote:
>>>>
>>>> Well, there are couple of points while Jassandra is created:
>>>>
>>>> 1. First of all, I want to create something like that is because I come
>>>> from
>>>> JDBC background, and familiar with Hibernate API. The ICriteria (which
>>>> is
>>>> created for querying) is inspired by the Criteria API from hibernate.
>>>>
>>>> Actually, maybe because of this background, it cost me a lot efforts try
>>>> to
>>>> understand Cassandra in the beginning and Thrift API also takes time to
>>>> use.
>>>>
>>>> 2. The Jassandra creates a layer, which removes the direct link to
>>>> underlying Thrift API (including the exceptions, ConsistencyLevel
>>>> enumeration etc)
>>>>
>>>> High light this point because I believe the client of the Jassandra will
>>>> benefit for the implementation changes in future, for example, if the
>>>> Cassandra provides better Thrift API to selecting the columns for a list
>>>> of
>>>> keys, SCFs, or deprecating some structures, exceptions, the client may
>>>> not
>>>> be changed. Of cause, if Jassandra failed to approve itself, this is
>>>> actually not the advantage. :)
>>>>
>>>> 3. The Jassandra is designed to be an JDBC like API, no less, no more.
>>>> It
>>>> strives to use the best API to do the quering (with token, key, SCF/
>>>> CF),
>>>> doing the CRUD, but no more than that. For example, it does not cover
>>>> any
>>>> API like object mapping. But it should cover all the API functionalities
>>>> Thrift provided.
>>>>
>>>> These 3 points, are different from Hector (I should be honest that I
>>>> have
>>>> not tried to use it before, the feeling of difference are coming from
>>>> the
>>>> sample code Hector provided).
>>>>
>>>> So, the API Jassandra abstracted was something like this:
>>>>
>>>>    IConnection connection = DriverManager.getConnection(
>>>>        "thrift://localhost:9160", info);
>>>>    try {
>>>>      // 2. Get a KeySpace by name
>>>>      IKeySpace keySpace = connection.getKeySpace("Keyspace1");
>>>>
>>>>      // 3. Get a ColumnFamily by name
>>>>      IColumnFamily cf = keySpace.getColumnFamily("Standard2");
>>>>
>>>>      // 4. Insert like this
>>>>      long now = System.currentTimeMillis();
>>>>      ByteArray nameFirst = ByteArray.ofASCII("first");
>>>>      ByteArray nameLast = ByteArray.ofASCII("last");
>>>>      ByteArray nameAge = ByteArray.ofASCII("age");
>>>>      ByteArray valueLast = ByteArray.ofUTF8("Smith");
>>>>      IColumn colFirst = new Column(nameFirst, ByteArray.ofUTF8("John"),
>>>> now);
>>>>      cf.insert(userName, colFirst);
>>>>
>>>>      IColumn colLast = new Column(nameLast, valueLast, now);
>>>>      cf.insert(userName, colLast);
>>>>
>>>>      IColumn colAge = new Column(nameAge, ByteArray.ofLong(42), now);
>>>>      cf.insert(userName, colAge);
>>>>
>>>>      // 5. Select like this
>>>>      ICriteria criteria = cf.createCriteria();
>>>>      criteria.keyList(Lists.newArrayList(userName))
>>>>          .columnRange(nameAge, nameLast, 10);
>>>>      Map<String, List<IColumn>> map = criteria.select();
>>>>      List<IColumn> list = map.get(userName);
>>>>      Assert.assertEquals(3, list.size());
>>>>      Assert.assertEquals(valueLast, list.get(2).getValue());
>>>>
>>>>      // 6. Delete like this
>>>>      cf.delete(userName, colFirst);
>>>>      map = criteria.select();
>>>>      Assert.assertEquals(2, map.get(userName).size());
>>>>
>>>>      // 7. Get count like this
>>>>      criteria = cf.createCriteria();
>>>>      criteria.keyList(Lists.newArrayList(userName));
>>>>      int count = criteria.count();
>>>>      Assert.assertEquals(2, count);
>>>>    } finally {
>>>>      // 8. Don't forget to close the connection.
>>>>      connection.close();
>>>>
>>>>    }
>>>>  }
>>>>
>>>> -----Original Message-----
>>>> From: Jonathan Ellis [mailto:jbellis@gmail.com]
>>>> Sent: Monday, April 19, 2010 10:35 PM
>>>> To: user@cassandra.apache.org
>>>>
>>>> Subject: Re: Cassandra Java Client
>>>>
>>>> How is Jassandra different from http://github.com/rantav/hector ?
>>>>
>>>> On Mon, Apr 19, 2010 at 9:21 AM, Dop Sun <sunht@dopsun.com> wrote:
>>>> > May I take this chance to share this link here:
>>>> >
>>>> > http://code.google.com/p/jassandra/
>>>> >
>>>> >
>>>> >
>>>> > It currently based with Cassandra 0.6 Thrift APIs.
>>>> >
>>>> >
>>>> >
>>>> > The class ThriftCriteria and ThriftColumnFamily has direct use of
>>>> Thrift
>>>> > API. Also, the site itself has test code, which is actually works on
>>>> > Jassandra abstraction.
>>>> >
>>>> >
>>>> >
>>>> > Dop
>>>> >
>>>> >
>>>> >
>>>> > From: Nirmala Agadgar [mailto:nirmala.ab@gmail.com]
>>>> > Sent: Friday, April 16, 2010 5:56 PM
>>>> > To: user@cassandra.apache.org
>>>> > Subject: Cassandra Java Client
>>>> >
>>>> >
>>>> >
>>>> > Hi,
>>>> >
>>>> > Can anyone tell how to implement Client that can insert data into
>>>> cassandra
>>>> > in Java. Any Code or guidelines would be helpful.
>>>> >
>>>> > -
>>>> > Nirmala
>>>> >
>>>>
>>>>
>>>>
>>>
>>>
>>
>

Mime
View raw message