2011-07-31 81 views
1

我正在將初始數據(爬蟲的url列表)加載到Cassandra並且爬網狀態= 0。然後使用Hadoop我抓取所有的鏈接,並嘗試更改從0爬到其他東西,例如1或2,或3.當我檢查Cassandra cli接口獲取ColumnFamily ['www.somedomain.com']爬蟲的值列保持不變。如果在初次導入時我沒有提到抓取列,它會正確添加。這只是算法的一部分,我需要使用其他Map/Reduce作業等進一步更新此列。爲什麼突變不會爲現有列創建插入

在Thrift和Cassandra API中,我們說只有插入和刪除。插入應該作爲更新。

對於爬行列我有UTF8類型。

突變種類是這樣的:

private static Mutation getMutationCrawled(Text crawledVal) 
    { 
     Text column = new Text(); 
     column.set("crawled"); 

     Column c = new Column(); 

     c.setName(ByteBuffer.wrap(Arrays.copyOf(column.getBytes(), column.getLength()))); 
     c.setValue(ByteBuffer.wrap(crawledVal.getBytes())); 
     c.setTimestamp(System.currentTimeMillis()); 

     Mutation m = new Mutation(); 
     m.setColumn_or_supercolumn(new ColumnOrSuperColumn()); 
     m.column_or_supercolumn.setColumn(c); 

     return m; 
    } 

回答

2

卡桑德拉使用突變的時間戳,其中最大的時間戳獲獎解決衝突。您可以將時間戳值設置爲任何您想要的值,但慣例是將時間戳值設置爲微秒內的值。在上面的例子中,設置與所述時間戳,

c.setTimestamp(System.currentTimeMillis()); 

最有可能的初始導入代碼來填充值是設置在微秒的時間戳記。微秒時間戳值大於毫秒時間戳值,因此您的更新被忽略。

+0

謝謝!問題就是這樣 – Anton

相關問題