spring data cassandra

12
CASSANDRA INTEGRATION Spring Data

Upload: niallmilton

Post on 16-Jul-2015

167 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Spring Data Cassandra

CASSANDRA

INTEGRATIONSpring Data

Page 2: Spring Data Cassandra

CASSANDRA INTRO

Page 3: Spring Data Cassandra

SPRING DATA

CASSANDRA

Page 4: Spring Data Cassandra

Rationale

• Reduces ramp up time and code required to work with

Cassandra

• Clear, annotation based mappings for java objects to

Cassandra tables

• Good fit if already using spring data / spring boot

• Minimal property based configuration

Page 5: Spring Data Cassandra

Features

• Uses common spring data repository pattern

• Synchronous and Asynchronous requests via the

DataStax Java Driver

• XML based CQL schema creation

• JavaConfig / XML support via properties

• QueryBuilder interface for complex query creation.

Page 6: Spring Data Cassandra

Annotated POJOs

• Allows easy mapping of annotated POJOs to Cassandra

tables.

@Table("users")

public class User {

@PrimaryKey("user_id")

private String userId;

@Column("first_name")

private String firstName;

@Column("last_name")

private String lastName;

private String password;

Page 7: Spring Data Cassandra

Spring Repository Support

• Basic Support of Spring Data Repository pattern.

• Provides CRUD operations without code, findOne, findAll,

save (upsert), delete.

• Easily extensible with custom queries.

public interface UserRepository extends CassandraRepository<User> {

@Query("select * from users where user_id = ?0")

User findByUserId(String userId);

}

Page 8: Spring Data Cassandra

Primary Keys

• Easily define simple, compound or composite primary

keys. Allows for narrow or wide rows.

• Simple Key example:

@PrimaryKey("user_id")

private String userId;

• Compound Key with Cluster Column Example:

@PrimaryKeyColumn(name = "eid", ordinal = 0, type = PrimaryKeyType.PARTITIONED)

private Integer eid;

@PrimaryKeyColumn(name = "day", ordinal = 1, type = PrimaryKeyType.PARTITIONED)

private Integer day;

@PrimaryKeyColumn(name = "event_id", ordinal = 2, type = PrimaryKeyType.CLUSTERED)

private UUID eventId;

Page 9: Spring Data Cassandra

Query Support

• No support for spring data “findBy” style queries at

present, e.g. findByNameLikeOrderBy

• Use @Query annotation for custom queries

@Query("select * from events_by_tag where eid = ?0 and tag = ?1")

List<Event> findByEidAndTag(Integer eid, String tag);

Page 10: Spring Data Cassandra

Query Support

• Use static BasicMapId.id() to construct primary key based

queries.

MapId id = id()

.with("eid", 1)

.with("day", 12345)

.with("eventId”, “XXXX-XXXX-XXXX”);

return eventsByDayRepository.findOne(id);

Page 11: Spring Data Cassandra

Or use Java Driver QueryBuilder

• Use QueryBuilder to create queries including batch and

transaction based queries.

Select select = QueryBuilder

.select()

.all()

.from(“events_by_day”)

.where(eq("eid", 1))

.and(eq("day", 12345))

.and(eq("eventId", “XXXX-XXXX-XXXX”));

return cassandraOperations

.select (select, Event.class);

Page 12: Spring Data Cassandra

DEMO