Achilles 
object mapper for Cassandra 
DuyHai DOAN, Technical Advocate, Achilles creator 
@doanduyhai
Shameless self-promotion! 
@doanduyhai 
2 
Duy Hai DOAN 
Cassandra technical advocate 
• talks, meetups, confs 
• open-source devs (Achilles, …) 
• Europe technical point of contact 
☞ duy_hai.doan@datastax.com 
• production troubleshooting
Agenda! 
@doanduyhai 
3 
Why Achilles ? 
Live Demo 
Main API 
Documentation 
RoadMap
Why Achilles ?! 
@doanduyhai 
4 
CQL looks like SQL 
INSERT INTO users(login, name, age) VALUES(‘jdoe’, ‘John DOE’, 33); 
UPDATE users SET age = 34 WHERE login = jdoe; 
DELETE age FROM users WHERE login = jdoe; 
SELECT age FROM users WHERE login = jdoe;
Why Achilles ?! 
@doanduyhai 
5 
Do you want to do this ? 
String query = ‘’SELECT * FROM users WHERE login = ‘jdoe’ ‘’; 
List<Row> rows = session.execute(query).all(); 
for(Row row: rows) { 
String name = row.getString(‘’name’’); 
int age = row.getInt(‘’age’’); 
… 
}
Live code 
DEMO ! 
https://github.com/doanduyhai/achilles-demo
Main API! 
@doanduyhai 
7 
manager.insert(entity) 
manager.update(entity) 
manager.remove(entity) 
manager.find(Entity.class, primaryKey)
Main API! 
@doanduyhai 
8 
Slice query, typed query 
RegularStatement select = select().from(“user_messages”) 
.where(eq(“user_id”,bindMarker())) 
.and(gte(asList(“message_folder”), bindMarker())) 
.and(lt(asList(“message_folder”, “date”), bindMarker())) 
.limit(10); 
List<Message> messages = manager.typedQuery(Message.class, select, 
userId, asList(“forums”), asList(“forums”, uuid1)) 
.get();
Main API! 
@doanduyhai 
9 
Native query 
RegularStatement nativeQuery = new SimpleStatement(“SELECT * FROM 
Message WHERE … LIMIT 1”); 
TypedMap firstMessage = manager.nativeQuery(nativeQuery).first(); 
String interlocutor = firstMessage.getTyped(“interlocutor”); 
//Or 
String interlocutor = firstMessage.<String>getTyped(“interlocutor”);
Main API! 
@doanduyhai 
10 
Counter 
Batch mode 
Strategies (insert, naming) 
Options
Documentation! 
@doanduyhai 
11 
Comprehensive Github WIKI 
Twitter-clone demo app (demo.achilles.io) 
Versioned documentation (HTML & PDF) 
JavaDoc
RoadMap! 
@doanduyhai 
12 
Asynchronous API (branch Asynchronous) 
• main API ( insert(), update(), …) 
• slice, typed & native queries 
C* 2.1 user defined types (UDT) 
Reactive ? (RxJava) 
ElasticSearch integration (@olivierbourgain)
Where to get Achilles ?! 
@doanduyhai 
13 
www.achilles.io 
Google ‘’Cassandra Achilles’’ ☞ first result
! " 
! 
Q & R
Thank You 
@doanduyhai 
duy_hai.doan@datastax.com 
www.achilles.io

Achilles presentation

  • 1.
    Achilles object mapperfor Cassandra DuyHai DOAN, Technical Advocate, Achilles creator @doanduyhai
  • 2.
    Shameless self-promotion! @doanduyhai 2 Duy Hai DOAN Cassandra technical advocate • talks, meetups, confs • open-source devs (Achilles, …) • Europe technical point of contact ☞ duy_hai.doan@datastax.com • production troubleshooting
  • 3.
    Agenda! @doanduyhai 3 Why Achilles ? Live Demo Main API Documentation RoadMap
  • 4.
    Why Achilles ?! @doanduyhai 4 CQL looks like SQL INSERT INTO users(login, name, age) VALUES(‘jdoe’, ‘John DOE’, 33); UPDATE users SET age = 34 WHERE login = jdoe; DELETE age FROM users WHERE login = jdoe; SELECT age FROM users WHERE login = jdoe;
  • 5.
    Why Achilles ?! @doanduyhai 5 Do you want to do this ? String query = ‘’SELECT * FROM users WHERE login = ‘jdoe’ ‘’; List<Row> rows = session.execute(query).all(); for(Row row: rows) { String name = row.getString(‘’name’’); int age = row.getInt(‘’age’’); … }
  • 6.
    Live code DEMO! https://github.com/doanduyhai/achilles-demo
  • 7.
    Main API! @doanduyhai 7 manager.insert(entity) manager.update(entity) manager.remove(entity) manager.find(Entity.class, primaryKey)
  • 8.
    Main API! @doanduyhai 8 Slice query, typed query RegularStatement select = select().from(“user_messages”) .where(eq(“user_id”,bindMarker())) .and(gte(asList(“message_folder”), bindMarker())) .and(lt(asList(“message_folder”, “date”), bindMarker())) .limit(10); List<Message> messages = manager.typedQuery(Message.class, select, userId, asList(“forums”), asList(“forums”, uuid1)) .get();
  • 9.
    Main API! @doanduyhai 9 Native query RegularStatement nativeQuery = new SimpleStatement(“SELECT * FROM Message WHERE … LIMIT 1”); TypedMap firstMessage = manager.nativeQuery(nativeQuery).first(); String interlocutor = firstMessage.getTyped(“interlocutor”); //Or String interlocutor = firstMessage.<String>getTyped(“interlocutor”);
  • 10.
    Main API! @doanduyhai 10 Counter Batch mode Strategies (insert, naming) Options
  • 11.
    Documentation! @doanduyhai 11 Comprehensive Github WIKI Twitter-clone demo app (demo.achilles.io) Versioned documentation (HTML & PDF) JavaDoc
  • 12.
    RoadMap! @doanduyhai 12 Asynchronous API (branch Asynchronous) • main API ( insert(), update(), …) • slice, typed & native queries C* 2.1 user defined types (UDT) Reactive ? (RxJava) ElasticSearch integration (@olivierbourgain)
  • 13.
    Where to getAchilles ?! @doanduyhai 13 www.achilles.io Google ‘’Cassandra Achilles’’ ☞ first result
  • 14.
    ! " ! Q & R
  • 15.
    Thank You @doanduyhai duy_hai.doan@datastax.com www.achilles.io