You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Ivan Chang <iv...@medigy.com> on 2009/06/17 22:54:18 UTC
Data persistency
I tried to insert and retrieve data from a standalone Java program. While I
am able to insert and retrieve the correct data from within the Java
session. After I terminate the session, and rerun only the data retrieval
part, the previous inserted data does not exist anymore, throwing a null
exception. Here's the code:
// Get storage-config file location
System.out.println("storage-config="+DatabaseDescriptor.getConfigFileName());
// Insert some data with key "partner1"
RowMutation rm = new RowMutation("Table1", "partner1");
ColumnFamily cf = new ColumnFamily("Standard1", "Standard");
long now = Calendar.getInstance().getTimeInMillis();
System.out.println(now);
cf.addColumn("firstname", "John1".getBytes(), now);
cf.addColumn("lastname", "Doe1".getBytes(), now);
rm.add(cf);
try {
rm.apply();
} catch (Exception e) {
}
// Retrieve data for key "partner1"
Table table = Table.open("Table1");
try {
Row result = table.getRow("partner1", "Standard1");
System.out.println(result.toString());
ColumnFamily cres = result.getColumnFamily("Standard1");
Map cols = cres.getColumns();
System.out.println(cols.size());
Set c = cols.keySet();
Iterator it = c.iterator();
while (it.hasNext()) {
String cn = (String) it.next();
System.out.println(cn);
System.out.println(new String(cres.getColumn(cn).value()));
}
} catch (Exception e) {
System.out.println("Ex: " + e.getMessage());
}
the print out from above is
storage-config=~/Cassandra/trunk/conf/storage-conf.xml
1245270260114
Row(partner1 [ColumnFamily(Standard1 [firstname:false:5@1245270260114,
lastname:false:4@1245270260114]))]
2
lastname
Doe1
firstname
John1
However, when I commented out the insert part of the above code and try
retrieve data again by rerunning the main code, I got an exception:
Row(partner1 [)]
Ex: null
So the data doesn't seem to persist across sessions.
Could someone explain what's wrong with the code?
Thanks,
Ivan
Re: Data persistency
Posted by Jonathan Ellis <jb...@gmail.com>.
You don't. Supercolumns are not arbitrarily nestable.
A columnfamily is either super or normal; a super columnfamily
contains supercolumns, which in turn contain Columns. A normal
columnfamily contains Columns directly. You can't mix-and-match
supercolumns and normal columns (at the same level of nesting) in a
single columnfamily.
-Jonathan
On Thu, Jun 18, 2009 at 12:12 PM, Ivan Chang<iv...@medigy.com> wrote:
> Using Cassandra.Client works. However more questions arise, specifically
> regarding Super Columns, while the following code persist the super column
> "sc1"with 3 simple columns. How do I create nested super columns? A super
> column with multiple super columns and standard columns? Thanks, Ivan
>
> // Super Column
> batch_mutation_super_t bt = new batch_mutation_super_t();
> bt.key = "testkey";
> bt.table = tablename_;
> bt.cfmap = new HashMap<String,List<superColumn_t>>();
> List<superColumn_t> superColumn_arr = new
> ArrayList<superColumn_t>();
> List<column_t> column_arr2 = new ArrayList<column_t>();
> column_arr2.add(new column_t("c1", "v1".getBytes(), now));
> column_arr2.add(new column_t("c2", "v2".getBytes(), now));
> column_arr2.add(new column_t("c3", "v3".getBytes(), now));
> superColumn_arr.add(new superColumn_t("sc1", column_arr2));
> bt.cfmap.put("Super1", superColumn_arr);
> peerstorageClient.batch_insert_superColumn(bt, false);
>
> On Wed, Jun 17, 2009 at 5:01 PM, Jonathan Ellis <jb...@gmail.com> wrote:
>>
>> You're using internal APIs. Don't do that unless you know what you're
>> doing. :)
>>
>> The client API is in Cassandra.Client.
>>
>> We have some sample code here:
>> http://wiki.apache.org/cassandra/ClientExamples
>>
>> (although none in Java yet, it should still be pretty clear.)
>>
>> -Jonathan
>>
>> On Wed, Jun 17, 2009 at 3:54 PM, Ivan Chang<iv...@medigy.com> wrote:
>> > I tried to insert and retrieve data from a standalone Java program.
>> > While I
>> > am able to insert and retrieve the correct data from within the Java
>> > session. After I terminate the session, and rerun only the data
>> > retrieval
>> > part, the previous inserted data does not exist anymore, throwing a null
>> > exception. Here's the code:
>> >
>> > // Get storage-config file location
>> >
>> >
>> > System.out.println("storage-config="+DatabaseDescriptor.getConfigFileName());
>> >
>> > // Insert some data with key "partner1"
>> > RowMutation rm = new RowMutation("Table1", "partner1");
>> > ColumnFamily cf = new ColumnFamily("Standard1", "Standard");
>> > long now = Calendar.getInstance().getTimeInMillis();
>> > System.out.println(now);
>> > cf.addColumn("firstname", "John1".getBytes(), now);
>> > cf.addColumn("lastname", "Doe1".getBytes(), now);
>> > rm.add(cf);
>> > try {
>> > rm.apply();
>> > } catch (Exception e) {
>> > }
>> >
>> > // Retrieve data for key "partner1"
>> > Table table = Table.open("Table1");
>> >
>> > try {
>> > Row result = table.getRow("partner1", "Standard1");
>> > System.out.println(result.toString());
>> > ColumnFamily cres = result.getColumnFamily("Standard1");
>> > Map cols = cres.getColumns();
>> > System.out.println(cols.size());
>> > Set c = cols.keySet();
>> > Iterator it = c.iterator();
>> > while (it.hasNext()) {
>> > String cn = (String) it.next();
>> > System.out.println(cn);
>> > System.out.println(new
>> > String(cres.getColumn(cn).value()));
>> > }
>> > } catch (Exception e) {
>> > System.out.println("Ex: " + e.getMessage());
>> > }
>> >
>> > the print out from above is
>> >
>> > storage-config=~/Cassandra/trunk/conf/storage-conf.xml
>> > 1245270260114
>> > Row(partner1 [ColumnFamily(Standard1 [firstname:false:5@1245270260114,
>> > lastname:false:4@1245270260114]))]
>> > 2
>> > lastname
>> > Doe1
>> > firstname
>> > John1
>> >
>> > However, when I commented out the insert part of the above code and try
>> > retrieve data again by rerunning the main code, I got an exception:
>> >
>> > Row(partner1 [)]
>> > Ex: null
>> >
>> > So the data doesn't seem to persist across sessions.
>> >
>> > Could someone explain what's wrong with the code?
>> >
>> > Thanks,
>> > Ivan
>> >
>
>
Re: Data persistency
Posted by Ivan Chang <iv...@medigy.com>.
Using Cassandra.Client works. However more questions arise, specifically
regarding Super Columns, while the following code persist the super column
"sc1"with 3 simple columns. How do I create nested super columns? A super
column with multiple super columns and standard columns? Thanks, Ivan
// Super Column
batch_mutation_super_t bt = new batch_mutation_super_t();
bt.key = "testkey";
bt.table = tablename_;
bt.cfmap = new HashMap<String,List<superColumn_t>>();
List<superColumn_t> superColumn_arr = new
ArrayList<superColumn_t>();
List<column_t> column_arr2 = new ArrayList<column_t>();
column_arr2.add(new column_t("c1", "v1".getBytes(), now));
column_arr2.add(new column_t("c2", "v2".getBytes(), now));
column_arr2.add(new column_t("c3", "v3".getBytes(), now));
superColumn_arr.add(new superColumn_t("sc1", column_arr2));
bt.cfmap.put("Super1", superColumn_arr);
peerstorageClient.batch_insert_superColumn(bt, false);
On Wed, Jun 17, 2009 at 5:01 PM, Jonathan Ellis <jb...@gmail.com> wrote:
> You're using internal APIs. Don't do that unless you know what you're
> doing. :)
>
> The client API is in Cassandra.Client.
>
> We have some sample code here:
> http://wiki.apache.org/cassandra/ClientExamples
>
> (although none in Java yet, it should still be pretty clear.)
>
> -Jonathan
>
> On Wed, Jun 17, 2009 at 3:54 PM, Ivan Chang<iv...@medigy.com> wrote:
> > I tried to insert and retrieve data from a standalone Java program.
> While I
> > am able to insert and retrieve the correct data from within the Java
> > session. After I terminate the session, and rerun only the data
> retrieval
> > part, the previous inserted data does not exist anymore, throwing a null
> > exception. Here's the code:
> >
> > // Get storage-config file location
> >
> >
> System.out.println("storage-config="+DatabaseDescriptor.getConfigFileName());
> >
> > // Insert some data with key "partner1"
> > RowMutation rm = new RowMutation("Table1", "partner1");
> > ColumnFamily cf = new ColumnFamily("Standard1", "Standard");
> > long now = Calendar.getInstance().getTimeInMillis();
> > System.out.println(now);
> > cf.addColumn("firstname", "John1".getBytes(), now);
> > cf.addColumn("lastname", "Doe1".getBytes(), now);
> > rm.add(cf);
> > try {
> > rm.apply();
> > } catch (Exception e) {
> > }
> >
> > // Retrieve data for key "partner1"
> > Table table = Table.open("Table1");
> >
> > try {
> > Row result = table.getRow("partner1", "Standard1");
> > System.out.println(result.toString());
> > ColumnFamily cres = result.getColumnFamily("Standard1");
> > Map cols = cres.getColumns();
> > System.out.println(cols.size());
> > Set c = cols.keySet();
> > Iterator it = c.iterator();
> > while (it.hasNext()) {
> > String cn = (String) it.next();
> > System.out.println(cn);
> > System.out.println(new
> String(cres.getColumn(cn).value()));
> > }
> > } catch (Exception e) {
> > System.out.println("Ex: " + e.getMessage());
> > }
> >
> > the print out from above is
> >
> > storage-config=~/Cassandra/trunk/conf/storage-conf.xml
> > 1245270260114
> > Row(partner1 [ColumnFamily(Standard1 [firstname:false:5@1245270260114,
> > lastname:false:4@1245270260114]))]
> > 2
> > lastname
> > Doe1
> > firstname
> > John1
> >
> > However, when I commented out the insert part of the above code and try
> > retrieve data again by rerunning the main code, I got an exception:
> >
> > Row(partner1 [)]
> > Ex: null
> >
> > So the data doesn't seem to persist across sessions.
> >
> > Could someone explain what's wrong with the code?
> >
> > Thanks,
> > Ivan
> >
>
Re: Data persistency
Posted by Jonathan Ellis <jb...@gmail.com>.
You're using internal APIs. Don't do that unless you know what you're doing. :)
The client API is in Cassandra.Client.
We have some sample code here: http://wiki.apache.org/cassandra/ClientExamples
(although none in Java yet, it should still be pretty clear.)
-Jonathan
On Wed, Jun 17, 2009 at 3:54 PM, Ivan Chang<iv...@medigy.com> wrote:
> I tried to insert and retrieve data from a standalone Java program. While I
> am able to insert and retrieve the correct data from within the Java
> session. After I terminate the session, and rerun only the data retrieval
> part, the previous inserted data does not exist anymore, throwing a null
> exception. Here's the code:
>
> // Get storage-config file location
>
> System.out.println("storage-config="+DatabaseDescriptor.getConfigFileName());
>
> // Insert some data with key "partner1"
> RowMutation rm = new RowMutation("Table1", "partner1");
> ColumnFamily cf = new ColumnFamily("Standard1", "Standard");
> long now = Calendar.getInstance().getTimeInMillis();
> System.out.println(now);
> cf.addColumn("firstname", "John1".getBytes(), now);
> cf.addColumn("lastname", "Doe1".getBytes(), now);
> rm.add(cf);
> try {
> rm.apply();
> } catch (Exception e) {
> }
>
> // Retrieve data for key "partner1"
> Table table = Table.open("Table1");
>
> try {
> Row result = table.getRow("partner1", "Standard1");
> System.out.println(result.toString());
> ColumnFamily cres = result.getColumnFamily("Standard1");
> Map cols = cres.getColumns();
> System.out.println(cols.size());
> Set c = cols.keySet();
> Iterator it = c.iterator();
> while (it.hasNext()) {
> String cn = (String) it.next();
> System.out.println(cn);
> System.out.println(new String(cres.getColumn(cn).value()));
> }
> } catch (Exception e) {
> System.out.println("Ex: " + e.getMessage());
> }
>
> the print out from above is
>
> storage-config=~/Cassandra/trunk/conf/storage-conf.xml
> 1245270260114
> Row(partner1 [ColumnFamily(Standard1 [firstname:false:5@1245270260114,
> lastname:false:4@1245270260114]))]
> 2
> lastname
> Doe1
> firstname
> John1
>
> However, when I commented out the insert part of the above code and try
> retrieve data again by rerunning the main code, I got an exception:
>
> Row(partner1 [)]
> Ex: null
>
> So the data doesn't seem to persist across sessions.
>
> Could someone explain what's wrong with the code?
>
> Thanks,
> Ivan
>