copyright 2010-2012 emmanuel bernard and red hat inc. · 2018. 4. 16. · copyright 2010-2012...
TRANSCRIPT
![Page 1: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/1.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
![Page 2: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/2.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Hibernate OGMJPA for NoSQL
Emmanuel BernardData Platform Architect
but actually doing things
JBoss By Red Hat
![Page 3: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/3.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Before you leave
• JPA for NoSQL• Denormalization engine• Use the JPA mapping semantic• Does queries too (gradual ramp up)
![Page 4: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/4.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Emmanuel Bernard
• JBoss: Hibernate, JCP• Ceylon• Podcasts
• asylum.jboss.org• lescastcodeurs.com
• The rest is at http://emmanuelbernard.com• @emmanuelbernard
![Page 5: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/5.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
(No)SQL tour
![Page 6: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/6.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Relational databases
![Page 7: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/7.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Relational databases
• Data structure abstraction• Transaction, referential integrity• Common query language• (Simple) type• Proven usefulness
• tuning, backup, resilience
![Page 8: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/8.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Relational databases
• (Some) limitations:• planning for scale is hard• data model changes are painful
• New needs• limitless data for later analysis• instant fame syndrome• less query demanding data
![Page 9: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/9.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
NoSQL is not new
![Page 10: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/10.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
NoSQL is not new
![Page 11: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/11.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
NoSQL is not new
![Page 12: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/12.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
NoSQL alternatives
• Web “giants” needs• Very different Goals
• data size / availability• low latency / higher throughput
• Optimize some data access patterns
![Page 13: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/13.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
NoSQL families
• Graph oriented databases• Key / value stores• Document based stores• BigTable-style
key value
123 Address@23
126 “Booya”
{ "user" : { "id": "124",
"name": "Emmanuel", "addresses" : [
{ "city": "Paris", "country": "France" }, { "city": "Atlanta", "country": "USA" }
]}
1 Things A foo B bar C baz
2 Things C bam E coh People A Emmanuel
3 Languages A C B Java C Ceylon
![Page 14: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/14.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Flexibility at a cost
![Page 15: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/15.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Flexibility at a cost
• Programming model• no common API :(• query (Map Reduce, specific DSL, ...)• no schema => app driven schema
• Denormalization at the app layer
• Transaction / durability / consistency
![Page 16: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/16.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
JPA for NoSQL
![Page 17: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/17.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Demo
![Page 18: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/18.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Goals
• Encourage new data usage patterns• volume, types etc
• Familiar environment• Full JPA support• easy to jump in (and out!)
• Declarative denormalization
![Page 19: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/19.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
What it does
• Today• JPA front end for Infinispan, EhCache and MongoDB• CRUD support for @Entities• Full-text queries
• Working on it• JP-QL queries (simple ones)• More NoSQL (Cassandra)• Explore denormalization
![Page 20: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/20.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Not a silver bullet!
• But JPA matches quite nicely
![Page 21: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/21.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Concepts
![Page 22: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/22.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Schema or no schema?
• Schema-less• developer friendly• data structure migration?• need strict development guidelines
• Schema• strong documentation• share with other apps / tooling
![Page 23: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/23.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Entities as serialized blobs?
• Store the whole graph?• Consistency with duplicated objects
• Structure change and (de)serialization
![Page 24: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/24.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
OGM’s approach
• Keep what’s best from relational model• as much as possible
• Decorrelate object and data structure• object model evolution
• Data stored as (self-described) tuples• Limited set of core types• CRUD operations are key lookups
![Page 25: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/25.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Hibernate OGM’s data structure
![Page 26: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/26.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Storage - Entities
• Each entity in a unique key• table name• id column names and values
• Value is Map<String,Object>• String: column name• Object: simple type (serializable)
![Page 27: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/27.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Storage - Associations
• Cannot store exactly like relational DBs• Simulate navigation to associations
• one key per navigation• Value is the list of tuples• Focus on speedy reads
• writes involve several key lookups
![Page 28: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/28.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
userIdnameaddresses
User
addressIdcity
Address
userId_pkname
tbl_useraddressId_pkcity
tbl_addressuserId_fkaddressId_fk
tbl_user_address
nn
*1 1*
key value
tbl_user,userId_pk,1 {userId_pk=1,name=”Emmanuel”}
tbl_address,addressId_pk,3 {addressId_pk=3,city=”Paris”}
tbl_user_address,userId_fk,1 { {userId_fk=1, addressId_fk=3}, {userId_fk=1, addressId_fk=5} }
tbl_address,addressId_pk,5 {addressId_pk=5,city=”Atlanta”}
tbl_user_address,addressId_fk,3 { {userId_fk=1, addressId_fk=3}, {userId_fk=2, addressId_fk=3} }
tbl_user,userId_pk,2 {userId_pk=2,name=”Caroline”}
tbl_user_address,userId_fk,2 { {userId_fk=2, addressId_fk=3} }
tbl_user_address,addressId_fk,5 { {userId_fk=1, addressId_fk=5} }
![Page 29: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/29.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
userIdnameaddresses
User
addressIdcity
Address
userId_pkname
tbl_useraddressId_pkcity
tbl_addressuserId_fkaddressId_fk
tbl_user_address
nn
*1 1*
key value
tbl_user,userId_pk,1 {userId_pk=1,name=”Emmanuel”}
tbl_address,addressId_pk,3 {addressId_pk=3,city=”Paris”}
tbl_user_address,userId_fk,1 { {userId_fk=1, addressId_fk=3}, {userId_fk=1, addressId_fk=5} }
tbl_address,addressId_pk,5 {addressId_pk=5,city=”Atlanta”}
tbl_user_address,addressId_fk,3 { {userId_fk=1, addressId_fk=3}, {userId_fk=2, addressId_fk=3} }
tbl_user,userId_pk,2 {userId_pk=2,name=”Caroline”}
tbl_user_address,userId_fk,2 { {userId_fk=2, addressId_fk=3} }
tbl_user_address,addressId_fk,5 { {userId_fk=1, addressId_fk=5} }
![Page 30: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/30.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
userIdnameaddresses
User
addressIdcity
Address
userId_pkname
tbl_useraddressId_pkcity
tbl_addressuserId_fkaddressId_fk
tbl_user_address
nn
*1 1*
key value
tbl_user,userId_pk,1 {userId_pk=1,name=”Emmanuel”}
tbl_address,addressId_pk,3 {addressId_pk=3,city=”Paris”}
tbl_user_address,userId_fk,1 { {userId_fk=1, addressId_fk=3}, {userId_fk=1, addressId_fk=5} }
tbl_address,addressId_pk,5 {addressId_pk=5,city=”Atlanta”}
tbl_user_address,addressId_fk,3 { {userId_fk=1, addressId_fk=3}, {userId_fk=2, addressId_fk=3} }
tbl_user,userId_pk,2 {userId_pk=2,name=”Caroline”}
tbl_user_address,userId_fk,2 { {userId_fk=2, addressId_fk=3} }
tbl_user_address,addressId_fk,5 { {userId_fk=1, addressId_fk=5} }
![Page 31: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/31.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Queries
• Hibernate Search indexes entities• Store Lucene indexes in Infinispan• JP-QL to Lucene query
• Works for simple-ish queries
![Page 32: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/32.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
select a from Animal a where a.size > 20> animalQueryBuilder .range().onField(“size”).above(20).excludeLimit() .createQuery();
select u from Order o join o.user u where o.price > 100 and u.city = “Paris”> orderQB.bool() .must( orderQB.range().onField(“price”) .above(100).excludeLimit().createQuery() ) .must( orderQB.keyword().onField(“user.city”) .matching(“Paris”).createQuery() ) .createQuery();
![Page 33: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/33.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Hibernate Search is awesome
• Full-text search made simple• fuzzy, ngram, phonetic• faceting, geolocation
• Nice and readable Query DSL
• Computed on app layer side• Clusterable
![Page 34: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/34.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Future
• More NoSQL families• More JP-QL support• JP-QL to “primitives”• API for operations in bulk• More denormalization options• Hybrid deployment options
![Page 35: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/35.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
Hibernate OGM
• JPA for NoSQL• Denormalization engine• Does queries too
• Status• CRUD support for Infinispan, EHCache, MongoDB• queries are the next frontier
![Page 36: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/36.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
More info
• Documentation• http://ogm.hibernate.org
• including reference doc• Any good JPA book ;)
• Code• come and contribute or you’ll get 7 years of bad sex• https://github.com/hibernate/hibernate-ogm
• Q&A
![Page 37: Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. · 2018. 4. 16. · Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc. userId name addresses User addressId city Address userId_pk](https://reader036.vdocument.in/reader036/viewer/2022081614/5fcf3b0aa015001c1b40d310/html5/thumbnails/37.jpg)
Copyright 2010-2012 Emmanuel Bernard and Red Hat Inc.
References
• Pictures under creative commons • http://www.flickr.com/photos/tomsaint/3415333390/• http://www.flickr.com/photos/anniewong/26473161/ • http://www.flickr.com/photos/jdhancock/5002736203/ • http://www.flickr.com/photos/liutao/280498401• http://www.flickr.com/photos/ehw/243631365/