2012-09-13 38 views
3

我有一個列族多列:Astyanax ColumnFamily <K, C> for multiple columns?

create column family user_attr2 
with comparator = 'UTF8Type' 
and default_validation_class = 'UTF8Type' 
and key_validation_class = 'UTF8Type' 
and column_metadata = [ 
{column_name: attr_value, validation_class: UTF8Type }, 
{column_name: last_sync_timestamp, validation_class: LongType}, 
{column_name: last_sync_digest, validation_class: UTF8Type } 
]; 

但Astyanax只有:

public class ColumnFamily<K, C> { ... } 

如何讀取使用Astyanax從上面列族的數據?

THX 卡盤

回答

0

貌似下在ColumnFamily中爲列名。這從類的java文檔中是不清楚的。

* @param <C> 

在這種情況下,我很幸運 - 我的列名是字符串。

1

我不知道它是否會有所幫助,但讀書的例子是在106線在此文件中

https://github.com/deanhiller/playorm/blob/8a4f3405631ad78e6822795633da8c59cb25bb29/input/javasrc/com/alvazan/orm/layer9z/spi/db/cassandra/CursorKeysToRows.java

和線86在這個文件中

https://github.com/deanhiller/playorm/blob/8a4f3405631ad78e6822795633da8c59cb25bb29/input/javasrc/com/alvazan/orm/layer9z/spi/db/cassandra/CassandraSession.java

OR你可以運行playOrm的測試用例,但是你必須修改FactorySingleton.java的IN_MEMORY,並將它改爲CASSANDRA來運行和調試它,並觀察它的行爲。這可以讓你複製。

playOrm是一個在noSQL之上執行S-SQL(可伸縮SQL)的ORM,因此您可以在分區內執行查詢(包括連接)....不久它將具有特殊工具以及查詢分區。

3

Astyanax入門指南涵蓋了一個這樣做的例子。但是,根據您的問題,混淆在於列元數據中指定的多個列值類型(驗證器),而ColumnFamily協議似乎意味着ColumnFamily的值是單一類型的。

下面的場景Astyanax無論如何將使用ByteBuffer進行序列化(使用它的序列化程序用於基元或使用您指定的序列化程序)......但是,當在讀/寫的上下文中使用此ColumnFamily API /而不是程序化的專欄定義),可能會產生誤導。

首先,您需要初始化Astyanax(Initialization)。那麼這樣的事情(從入門指南修改):

ColumnFamily<String, String> CF_USER_ATTR = 
    new ColumnFamily<String, String>(
    "user_attr2",    // Column Family Name 
    StringSerializer.get(), // Key Serializer 
    StringSerializer.get()); // Column Serializer 

OperationResult<ColumnList<String>> result = 
    ks.prepareQuery(CF_USER_ATTR) 
    .getKey("Key1") 
    .execute(); 
ColumnList<String> columns = result.getResult(); 

// Lookup columns in response by name 
String attr_value  = columns.getColumnByName("attr_value").getStringValue(); 
long timestamp = columns.getColumnByName("last_sync_timestamp").getLongValue(); 
String digest = columns.getColumnByName("last_sync_digest").getStringValue(); 

// Or, iterate through the columns 
for (Column<String> c : result.getResult()) { 
    System.out.println(c.getName()); 
} 

更多請見Astyanax Getting Started