我正在将状态为crawled = 0的Cassandra加载初始数据(抓取工具的网址列表)。然后使用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;
}
答案 0 :(得分:2)
Cassandra使用突变的时间戳解决冲突,获得最大的时间戳。您可以将timestamp值设置为您想要的任何值,但约定是将时间戳设置为以微秒为单位的值。在上面的示例中,您使用
设置时间戳 c.setTimestamp(System.currentTimeMillis());
填充值的初始导入代码很可能是以微秒为单位设置时间戳。微秒时间戳值大于毫秒时间戳值,因此您的更新将被忽略。