我在卡桑德拉2.1中使用Cassandra Object Mapping API。在API,它看起來像一排的UPDATE進行做這些步驟:Cassandra對象映射API目前不支持更新嗎?
- 獲取對象(Mapper.get)
- 變化要更新
- 保存對象的字段( Mapper.save)
其轉換爲一個SELECT後跟一個INSERT。現在的CQL3.1 UPDATE語句在Cassandra對象映射API的稍後階段是否支持部分更新?我想避免最初的閱讀。
我在卡桑德拉2.1中使用Cassandra Object Mapping API。在API,它看起來像一排的UPDATE進行做這些步驟:Cassandra對象映射API目前不支持更新嗎?
其轉換爲一個SELECT後跟一個INSERT。現在的CQL3.1 UPDATE語句在Cassandra對象映射API的稍後階段是否支持部分更新?我想避免最初的閱讀。
您可以使用Accessor
來編碼更新。
透明save
VS update
要麼會是使用代理和外地攔截器(複雜IMPL)規定,或導致實際上隱藏讀之前節省反模式。
使用訪問器應該爲您提供所需的一切,而無需使映射模塊在幕後執行魔術。
這個主題已經在這裏討論:https://datastax-oss.atlassian.net/plugins/servlet/mobile#issue/JAVA-474
試試這個映射 https://github.com/valchkou/cassandra-driver-mapping
它支持局部更新,包括集合
mapper.updateValue(id, Entity.class, propertyName, value);
/** Append value to the Set, List or Map. */
append(id, Entity.class, propertyName, value);
https://github.com/valchkou/cassandra-driver-mapping#write
而且它具有自動模式同步功能(和更少的功能)在數據傳輸中漏掉了映射器
用法示例:
Entity entity = new Entity();
mappingSession.save(entity);
entity = mappingSession.get(Entity.class, id);
mappingSession.delete(entity);
Maven的中央可供選擇:
<dependency>
<groupId>com.valchkou.datastax</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
</dependency>
感謝亞歷克斯,我都會看着那吉拉,看看你們拿出。我猜「Accessor」與編寫自己的CQL語句幾乎相同(這非常靈活)。 'Accessor'語法的一個問題是你靜態定義要更新的列是否正確?例如:'@Query(「UPDATE users SET first_name =:first,last_name =:last WHERE id =:id」)'我總是需要同時更新'first'和'last',據我瞭解。 – reikje 2014-11-05 08:47:03