Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL...
Transcript of Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL...
![Page 1: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/1.jpg)
Speaker : Alexey Zinoviev
Mom, I so wish Hibernate for my NoSQL database...
![Page 2: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/2.jpg)
About
● I am a scientist. The area of my interests includes machine
learning, traffic jams prediction, BigData algorythms.
● But I'm a programmer, so I'm interested in NoSQL databases,
Java, Android, Hadoop, Spark.
![Page 3: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/3.jpg)
Introduction
![Page 4: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/4.jpg)
The Good Old Days
![Page 5: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/5.jpg)
One of these fine days...
![Page 6: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/6.jpg)
We have a NoSQL job for you, son!
![Page 7: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/7.jpg)
You like SQL and HATE nontraditional data
![Page 8: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/8.jpg)
Let’s talk about it, Java-boy...
![Page 9: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/9.jpg)
NoSQL
![Page 10: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/10.jpg)
NoSQL
SQL
![Page 11: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/11.jpg)
The Database Market
![Page 12: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/12.jpg)
Have your ever heard about...
CAP - theorem?
![Page 13: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/13.jpg)
![Page 14: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/14.jpg)
![Page 15: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/15.jpg)
Flower varieties IData Model
Performance Scalability Flexibility Complexity Functionality
Key–value Stores
high high high none variable (none)
Column Store
high high moderate low minimal
Document Store
high variable (high)
high low variable (low)
Graph Database
variable variable high high graph theory
Relational Database
variable variable low moderate relational algebra
![Page 16: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/16.jpg)
Flower varieties II
Database Data model Query API Data storage system
Cassandra Column Family Thrift Memtable/SSTable
CouchDB Documents Map/Reduce Append-only-B-tree
Hbase Column Family Thrift, REST Memtable/SSTable on HDFS
MongoDB Documents Cursor B-tree
Neo4j Edges/Verticies Graph On-disk linked lists
Riak Key/Value Nested hashes, REST
Hash
![Page 17: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/17.jpg)
Flower varieties III
Database Secondary indexes
MapReduce Free form queries
Cassandra yes no CQL (no joins)
CouchDB yes JavaScript Views
Hbase no Hadoop weak support
MongoDB yes JavaScript Full stack without joins
Neo4j yes (with Lucene) no Search, graph operations
Riak yes JavaScript, Erlang weak support, Lucene
![Page 18: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/18.jpg)
But.. how about @ and JPA and ..
![Page 19: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/19.jpg)
Cassandra World
![Page 20: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/20.jpg)
● CRUD + column iteration, Partial support of JPA standart
● Consistency Level can be set per Column Family and per
operation type (Read, Write)
● Based on Thrift RPC protocol (1 response per 1 request)
● Mapping a Collection (POJO property) to columns
● Inheritance through ‘single table’
● Custom converters to/from byte[]
Hector
![Page 21: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/21.jpg)
![Page 22: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/22.jpg)
![Page 23: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/23.jpg)
● DataStax developed a new protocol that doesn't have RPC
limitations (Asynchronous I/O)
● Low-level API with simple mapping
● Works with CQL3
● QueryBuilder reminds CriteriaAPI
● Accessor-annotated interfaces
DataStax Java Driver
![Page 24: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/24.jpg)
![Page 25: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/25.jpg)
![Page 26: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/26.jpg)
Do you want more adventures?
![Page 27: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/27.jpg)
● Achilles : well documented and provides transactions
● Astyanax : connection pool, thread safety and pagination
● Pelops : old project, good bycicle
● PlayORM : strange but powerful thing
● Easy-Cassandra : simple annotations + CRUD
● Thrift as low level API
Other Cassandra’s OM
![Page 28: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/28.jpg)
Mongo World
![Page 29: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/29.jpg)
● Integrated with Spring, Guice and other DI frameworks
● Lifecycle Method Annotations (@PrePersist, @PostLoad)
● Built on top of Mongo Java Driver
● More better than old-style BSON-object quering
● Fluent Query API : ds.createQuery(MyEntity.class).filter("foo >",12).order("date, -
foo");
Morphia
![Page 30: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/30.jpg)
![Page 31: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/31.jpg)
![Page 32: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/32.jpg)
![Page 33: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/33.jpg)
![Page 34: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/34.jpg)
● Templating : connection configs, collection lifecycle (create,
drop), Map/Reduce + Aggregation
● Mapping: @Document, @Index, @Field
● Repository support: geospatial queries, queries derived
from method signatures (at runtime)
● Paging, sorting, CRUD operations
Spring Data MongoDB
![Page 35: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/35.jpg)
![Page 36: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/36.jpg)
● Jongo : mongo - shell queries in Java-code
● EclipseLink : different support of different NoSQL
databases
● MJORM : Google Code, XML mapping + MQL (SQL syntax
for Mongo data extracting)
● DataNucleus : support many Js as JDO, JPA
Mongo - mongo
![Page 37: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/37.jpg)
Hibernate in NoSQL world
![Page 38: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/38.jpg)
● Java Persistence (JPA) support for NoSQL solutions
● JP-QL queries are converted in native backend queries
● Hibernate Search as indexing engine and use full-text
queries
● You can call flush(), commit() and demarcate transactions
● It supports only MongoDB, Neo4j, Infinispan, Ehcache
Hibernate OGM
![Page 39: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/39.jpg)
![Page 40: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/40.jpg)
![Page 41: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/41.jpg)
Polyglot Persistance
![Page 42: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/42.jpg)
Polyglot Persistance
![Page 43: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/43.jpg)
● Redis: Rapid access for reads and writes. No need to be durable
● RBDMS: Needs transactional updates and has tabular structure.
● Riak: Needs high availability across multiple locations. Can merge
inconsistent writes
● Neo4j: Rapidly traverse links between friends and ratings.
● MongoDB: Lots of reads, infrequent writes. Powerful aggregation
mechanism.
● Cassandra: Large-scale analytics on large cluster. High volume of writes
on multiple nodes
Polyglot Persistance
![Page 44: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/44.jpg)
Kundera : Polyglot approach
● Atomicity guarantee and Transaction management
● Strictly JPA 2.1 compatible
● It supports Cassandra, Mongo, Hbase, Redis, Neo4j and etc
● @Embedded and @ElementCollection for ColumnFamily
and nested documents
● OneToMany, OneToOne, ManyToMany relationships
● Not full JPQL support for different database
![Page 45: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/45.jpg)
Kundera’s holes
![Page 46: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/46.jpg)
If you developing a project for...
● a U.S. company - Morphia or Hector
● a transnational company with history of merging - Kundera
● a Deutsche Bank - Hibernate OGM or SpringData
● a Russian company, or one in in the former U.S.S.R. - native
drivers is the best approach (you will spend so many time)
● … just to play - Jongo, Easy - Cassandra and EclipseLink
![Page 47: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/47.jpg)
Your Country Needs You!
● Know your cases and data!
● Choose right database!
● Choose right framework!
● In Soviet Russia backends
are waiting you!
![Page 48: Mom, I so wish Hibernate for my NoSQL database · Java Persistence (JPA) support for NoSQL solutions JP-QL queries are converted in native backend queries Hibernate Search as indexing](https://reader034.fdocuments.in/reader034/viewer/2022042918/5f5f8c4032729150a00cefb2/html5/thumbnails/48.jpg)
Your questions?