57
Building a Recommendation Engine with Java EE EE4J Otávio Santana @otaviojava [email protected] [email protected] Hilmer Chona @hchona [email protected] MedellinJUG.org

Building a Recommendation Engine with Java EE

Embed Size (px)

Citation preview

Page 1: Building a Recommendation Engine with Java EE

Building a Recommendation Engine with Java EE EE4J

Otávio Santana@[email protected]@apache.org

Hilmer Chona@[email protected]

Page 2: Building a Recommendation Engine with Java EE

Evolution

Page 3: Building a Recommendation Engine with Java EE

Goods

● Land● Gold● Oil● Information

Page 4: Building a Recommendation Engine with Java EE

Machines

Page 5: Building a Recommendation Engine with Java EE

The information is not enough

Page 6: Building a Recommendation Engine with Java EE

Big Data

Page 7: Building a Recommendation Engine with Java EE

Web 3.0Web Semantic

Page 8: Building a Recommendation Engine with Java EE

Next?

Page 9: Building a Recommendation Engine with Java EE

Recommendation

Page 10: Building a Recommendation Engine with Java EE
Page 11: Building a Recommendation Engine with Java EE

JCP

Page 12: Building a Recommendation Engine with Java EE

Ajax

Page 13: Building a Recommendation Engine with Java EE

Search

Page 14: Building a Recommendation Engine with Java EE
Page 15: Building a Recommendation Engine with Java EE
Page 16: Building a Recommendation Engine with Java EE
Page 17: Building a Recommendation Engine with Java EE

Collecting

Page 18: Building a Recommendation Engine with Java EE

Filtering

Page 19: Building a Recommendation Engine with Java EE

Stark

Rogers

Romanoff

Banners

Berlin

São Paulo

Moscow

San Francisco

Medellin

Travel

Page 20: Building a Recommendation Engine with Java EE

Stark

Rogers

Romanoff

Banners

New York

São Paulo

Moscow

San Francisco

Medellin

Travel

BusinessFun

Page 21: Building a Recommendation Engine with Java EE

Reasons why travel

1. Fun2. Conferences3. Music4. Geek Conf5. Family6. History7. Language8. Honeymoon9. Work

10. Meetings11. University12. Shopping13. Relax

Page 22: Building a Recommendation Engine with Java EE

More Information

name Tony Stark

nationality American

hero Iron man

power rich

when 2011

why Save the world

who flying

type Fun

name San Francisco

country USA

State California

Founded 1776

Travels

Page 23: Building a Recommendation Engine with Java EE

NoSQL● Database● Doesn't use structure● Not Transaction● BASE● Types

Page 24: Building a Recommendation Engine with Java EE

Graph

● Neo4j● InfoGrid● Sones● HyperGraphDB

Apollo Ares

Kratoswas killed by was killed by

Is brother

killed killed

Page 25: Building a Recommendation Engine with Java EE

SQL Key-value Column Document Graph

Table Bucket Column Family

Collection

Row Key/value pair

Column Document Vertex

Column Key/value pair

Key/value pair Vertex and Edge property

Relationship Link Edge

SQL vs NoSQL

Page 26: Building a Recommendation Engine with Java EE

Scalability vs Complexity

Scalability

Complexity

key-value

Column

Document

Graph

Page 27: Building a Recommendation Engine with Java EE

Graph

Grace Hopper

label Person

id ada

name Ada Lovelace

occupation scientist

Ada Lovelace

label Person

id grace

name Grace Hopper

occupation scientist

Knows

Vertex Vertex

Edge

Page 28: Building a Recommendation Engine with Java EE

Graph Database

Page 29: Building a Recommendation Engine with Java EE

TinkerPop

http://tinkerpop.apache.org/

Page 30: Building a Recommendation Engine with Java EE

TinkerPop

Grace Hopper

label Person

id grace

name Grace Hopper

occupation scientist

Vertex

grace = graph.addVertex( T.label, "person", "id", "grace", "name", "Grace Hopper", "occupation", "scientist");

Page 31: Building a Recommendation Engine with Java EE

TinkerPop

Grace Hopper

Ada Lovelace

Knows

grace.addEdge("knows", ada);

Page 32: Building a Recommendation Engine with Java EE

Edges

Out ->

In <-

Both

Page 33: Building a Recommendation Engine with Java EE

Marketing Campaign● Engineer● Salary 3000● Age between 20 and 25 years

Page 34: Building a Recommendation Engine with Java EE

SQLId name Occupation Salary age gender

... ... ... ... ... ...

SELECT * FROM Person WHERE

occupation = "Engineer" AND

salary > 3000 and age BETWEEN 20

AND 25

Page 35: Building a Recommendation Engine with Java EE

TinkerPopGrace Hopper

Ada Lovelace

Knows

g.V().has("occupation","Engineer").has("salary", gt(3000)).has("age", between(20, 25));

Page 36: Building a Recommendation Engine with Java EE

Their Friends

Page 37: Building a Recommendation Engine with Java EE

SQLId name Occupation Salary age gender

... ... ... ... ... ...

SELECT * FROM Person WHERE

occupation = "Engineer" AND

salary > 3000 and age BETWEEN 20

AND 25//...joins

Id know

... ...

Page 38: Building a Recommendation Engine with Java EE

TinkerPopGrace Hopper

Ada Lovelace

Knows

g.V().has("occupation","Engineer").has("salary", gt(3000)).has("age", between(20, 25)).out("knows");

Page 39: Building a Recommendation Engine with Java EE

Falling in love

Page 40: Building a Recommendation Engine with Java EE

SQLId name Occupation Salary age gender

... ... ... ... ... ...

SELECT * FROM Person WHERE

occupation = "Engineer" AND

salary > 3000 and age BETWEEN 20

AND 25//...joins

Id know

... ...

Id love

... ...

Page 41: Building a Recommendation Engine with Java EE

TinkerPopGrace Hopper

Ada Lovelace

Knows

g.V().has("occupation","Engineer").has("salary", gt(3000)).has("age", between(20, 25)).outE("knows").has("feel", "love").bothV();

Page 42: Building a Recommendation Engine with Java EE

JNoSQL

● Mapping API● Communication API● No lock-in● Divide and conquer

DAO

Mapping

Communication

DocumentKey

Column Graph

DIANA

ARTEMIS

JNoSQL

Data Tier

Page 43: Building a Recommendation Engine with Java EE

Artemis● CDI Based● Diana Based● Annotation Based● Events to insert, delete, update● Supports to Bean Validation● Configurable and Extensible● Query Method

Page 44: Building a Recommendation Engine with Java EE

Graph Database

Page 45: Building a Recommendation Engine with Java EE

Graph

Poliana

label Book

age 2007

name The Shack

The Shack

label Person

name Poliana

age 25

reads

where Brazil

Page 46: Building a Recommendation Engine with Java EE

Graph

Person poliana = graphTemplate.insert(Person.builder().withName("Poliana").withAge(25).build());

Book shack = graphTemplate.insert(Book.builder().withAge(2007).withName("The Shack").build());

EdgeEntity<Person, Book> reads = graphTemplate.edge(poliana, "reads", shack);reads.add("where", "Brazil");

Page 47: Building a Recommendation Engine with Java EE

Marketing Campaign● Engineer● Salary 3000● Age between 20 and 25 years

Page 48: Building a Recommendation Engine with Java EE

Developers

List<Person> developers = graph.getTraversalVertex() .has("salary", gte(3_000D)) .has("age", between(20, 25)) .has("occupation", "Developer") .<Person>stream().collect(toList());

Page 49: Building a Recommendation Engine with Java EE

Their Friends

Page 50: Building a Recommendation Engine with Java EE

People who developer knows

List<Person> result = graph.getTraversalVertex() .has("salary", gte(3_000D)) .has("age", between(20, 25)) .has("occupation", "Developer") .out("knows")

Page 51: Building a Recommendation Engine with Java EE

Falling in love

Page 52: Building a Recommendation Engine with Java EE

People who developer loves

List<Person> love = graph.getTraversalVertex() .has("salary", gte(3_000D)) .has("age", between(20, 25)) .has("occupation", "Developer") .outE("knows") .has("feel", "love") .bothV() .<Person>stream() .distinct() .collect(toList());

Page 53: Building a Recommendation Engine with Java EE

Book Recommendation

Software

Romance

NoSQL

Java

Micro Services

Effective Java

The Shack

Migrating to Microservice Databases

NoSQL Distilled

Page 54: Building a Recommendation Engine with Java EE

Software Categories

List<String> result = graph.getTraversalVertex() .hasLabel("Category") .has("name", "Software") .in("is") .hasLabel("Category").<Category>stream() .map(Category::getName) .collect(toList());

Page 55: Building a Recommendation Engine with Java EE

Query Methodinterface PersonRepository extends Repository<Person, Long> {

List<Person> findByAddress(String address);

Stream<Person> findByName(String name);

Stream<Person> findByNameAndKnowsOutV(String name);

Stream<Person> findByNameAndBothV(String name, String label);

Optional<Person> findByNickname(String nickname);

void deleteByNickName(String nickname);}

Page 56: Building a Recommendation Engine with Java EE

DemoJNoSQL

Configuration

CDI 2.0 with Java SE

Neo4J + Docker

Page 57: Building a Recommendation Engine with Java EE

Thank You

Otávio Santana@[email protected]@apache.org

Hilmer Chona@[email protected]