How to Use NoSQL in Enterprise Java Applications Patrick - - PowerPoint PPT Presentation

how to use nosql
SMART_READER_LITE
LIVE PREVIEW

How to Use NoSQL in Enterprise Java Applications Patrick - - PowerPoint PPT Presentation

How to Use NoSQL in Enterprise Java Applications Patrick Baumgartner NoSQL Roadshow | Basel | 30.08.2012 Agenda Speaker Profile New Demands on Data Access New Types of Data Stores Integrating NoSQL Data Stores Spring Data


slide-1
SLIDE 1

How to Use NoSQL

in Enterprise Java Applications

Patrick Baumgartner

NoSQL Roadshow | Basel | 30.08.2012

slide-2
SLIDE 2

2

Agenda

  • Speaker Profile
  • New Demands on Data Access
  • New Types of Data Stores
  • Integrating NoSQL Data Stores
  • Spring Data Overview
  • Example with MongoDB
  • Example with Neo4j
  • Q & A
slide-3
SLIDE 3

3

Speaker Profile

Patrick Baumgartner

  • Senior Software Consultant | Partner
  • VMware/SpringSource Certified Instructor (Spring Trainer)
  • Spring Framework, OSGi & agile engineering practices
  • Co-author of „OSGi für Praktiker“ (Hanser)

Swiftmind GmbH http://www.swiftmind.com

  • Enterprise Java, Spring & OSGi consulting
  • Spring & OSGi workshops & trainings
  • Agile engineering practices workshops
slide-4
SLIDE 4

4

New Demands on Data Access

  • Structured and

unstructured data

  • Massive amounts of data
  • Inexpensive horizontal

scaling

  • Apps and data in the

cloud

  • Social network features
slide-5
SLIDE 5

5

New Types of Data Stores

slide-6
SLIDE 6

6

We are not architects!

Integrating NoSQL Data Stores #1

http://www.flickr.com/photos/sakeeb/4087246274

slide-7
SLIDE 7

7

Don’t re-invent the wheel!

Integrating NoSQL Data Stores #2

http://www.flickr.com/photos/dmott9/5921728819

slide-8
SLIDE 8

8

Let’s use Spring!

Integrating NoSQL Data Stores #3

http://www.springsource.org/spring-data

slide-9
SLIDE 9

9

Spring Data

  • Same goals as the Spring Framework

– Productivity improvement – Programming model consistency – Portability

  • Umbrella for subprojects, specific to a given database
  • Mapping support for Java domain objects
  • http://www.springsource.org/spring-data
  • http://github.com/SpringSource/spring-data-XXX
slide-10
SLIDE 10

10

Spring Data – Overview #1

  • JPA
  • JDBC Extensions

Relational Databases

  • Apache Hadoop

Big Data

  • GemFire

Data Grid

  • REST

HTTP

slide-11
SLIDE 11

11

Spring Data – Overview #2

  • Redis

Key Value Stores

  • Mongo DB

Document Stores

  • Neo4J

Graph Databases

  • HBase

Column Stores

  • Commons

Common Infrastructure

slide-12
SLIDE 12

12

Spring Data – Key Features

  • Low level data access API abstraction

– MongoTemplate, RiakTemplate, Neo4jTemplate – Exception translation – Transaction management

  • Object Mapping (Java to data store)
  • Generic Repository Support

– Basic CRUD, dynamic finders, pagination and sorting

  • Spring namespaces
  • Cross Store Persistence Programming Model

– @Entity, @Document, @NodeEntity

slide-13
SLIDE 13

13

Spring Data MongoDB – Example

slide-14
SLIDE 14

14

Documents

Stored JSON: { "_id" : ObjectId("4f9886290364b533b3acd4ce"), "_class" : "com.acme.hello.domain.Person", "name" : "Bob", "age" : 33 }

slide-15
SLIDE 15

15

Spring Data MongoDB – Document

Stored JSON: { "_id" : ObjectId("4f9886290364b533b3acd4ce"), "_class" : "com.example.Person", "name" : "Bob", "age" : 33 }

@Document public class Person { @Id private int id; private String name; private int age; // getters/setters… }

slide-16
SLIDE 16

16

Spring Data MongoDB – Configuration

slide-17
SLIDE 17

17

Spring Data MongoDB – Repository

@Repository public class MongoPersonRepository implements BaseRepository<Person> { @Autowired MongoOperations mongoTemplate; Person createPerson(String name, int age){ if(!mongoTemplate.collectionExists(Person.class)){ mongoTemplate.createCollection(Person.class); } Person p = new Person(name, age); mongoTemplate.insert(p) return p; } ... }

slide-18
SLIDE 18

18

Spring Data Neo4j – Example

slide-19
SLIDE 19

19

Graph

slide-20
SLIDE 20

20

Spring Data Neo4j (SDN)

  • POJOs mapped as nodes or relationships – type safe
  • Works directly Database, typically embedded mode
  • Data is fetched very fast and lazy
  • Stores everything within a @Transaction
  • Uses heavily AspectJ magic to enhance the POJOs
slide-21
SLIDE 21

21

Spring Data Neo4j – Entity

_type_: com.example.Person name: "Alice" age: 42

@NodeEntity public class Person { private String name; private int age; // getters/setters… } Person alice = new Person(); alice.setName("Alice"); alice.setAge(42); alice.persist();

Node

slide-22
SLIDE 22

22

Spring Data Neo4j – NodeEntity

@NodeEntity public class Person { private String name; private int yearOfBirth; @RelatedTo(type = "KNOWS", direction = Direction.OUTGOING) private Set<Person> knownPersons; public void knows(Person p) { knownPersons.add(p); } public Set<Person> getFriends() { return knownPersons; } } Person alice = ...; alice.knows(bob); alice.knows(carol);

Alice Bob KNOWS Carol KNOWS

slide-23
SLIDE 23

23

Spring Data Neo4j – Relationship

@RelationshipEntity public class Knows { private int sinceYear; public Knows since(int year) { this.sinceYear = year; return this; } } @NodeEntity public class Person { public Known knows(Person p) { return this.relateTo(p, Knows.class, "KNOWS"); } } Person alice = ...; Person bob ...; alice.knows(bob).since(2012);

Alice Bob KNOWS since: 2012

slide-24
SLIDE 24

24

Spring Data Neo4j – Repository

public interface PersonRepository extends GraphRepository<Person> { @Query("start person = {0} match ... return ...") Iterable<Product> getOwnedServices(Person person); Iterable<Person> findByName(String name); Iterable<Person> findByNameLike(String name); } @Autowired PersonRepository personRepository; Person alice = personRepository.findByName("Alice");

slide-25
SLIDE 25

25

Spring Data Neo4j – Querying

  • Several possibilities implemented to query the graph

– Neo4j API – Traversal descriptions – Graph algorithms – Index queries – Cypher queries

slide-26
SLIDE 26

26

Use a data model which really matches to your data …

Give it a try!

http://www.flickr.com/photos/juniorvelo/3267647833

slide-27
SLIDE 27

27

NoSQL für Java Enterprise Anwendungen mit Spring Data

05.09.2012 /ch/open Workshop-Tage

4th – 6th September

http://www.flickr.com/photos/4nitsirk/5211251578

slide-28
SLIDE 28

28

Q & A

Patrick Baumgartner

patrick.baumgartner [at] swiftmind [dot] com http://www.swiftmind.com http://www.twitter.com/patbaumgartner