hands-onnosql-110818092713-phpapp01 (1)
Embed Size (px)
Transcript of hands-onnosql-110818092713-phpapp01 (1)
-
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
1/21
Click to edit Master subtitle style
4/28/12
Hands-on NoSQLMongoDB & Spring Integration
http://automateddeveloper.blogsp
-
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
2/21
4/28/12
Im a professional Software Engineerbased in the UK.
Neither I, nor this presentation, are in
any way affiliated with SpringSourceor MongoDB
Still want more?
http://automateddeveloper.blogspot.com http://www.thirdmindmedia.co.uk
http://automateddeveloper.blogspot.com/http://www.thirdmindmedia.co.uk/mailto:[email protected]:[email protected]://www.thirdmindmedia.co.uk/http://automateddeveloper.blogspot.com/ -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
3/21
4/28/12
What is NoSQL?
NoSQL means Not Only SQL
The NoSQL umbrella covers a range ofnon-relational databases, including key-value, document , wide column store
and graph based databases
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected] -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
4/21
4/28/12
Why NoSQL?
NoSQLs recent increase in popularitybeing largely driven by the explosionin amount of data that is now being
created/captured on the web
Many leading web 2.0 sites now useNoSQL implementations:
Facebook Cassandra (originallydeveloped in-house and later open-sourced
Twitter Hadoop & Cassandra
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected] -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
5/21
4/28/12
In the News
$14millionAmount raised in Series C Funding last week byCouchBase for further investment in to NoSQLsolutions(Aug2011)
4,850%Percent increase in NoSQL jobs since
November 2009 as reported bySimplyHired.com
8TBAmount of data generatedeveryday in Twitter, and needs tobe supported by their NoSQLsolution (figure from 2010)
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:in[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected] -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
6/21
4/28/12
MongoDB
An Open Source Documentoriented database
Dynamic schemas, storingdata in JSON style documents thatallows for addition of data on the fly
Supports indexing of documents Auto-sharding supported, providing
full horizontal scaling
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected] -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
7/21
4/28/12
MongoDB & Spring
Core Spring and the SpringMVC framework areenterprise standard Java
libraries for buildingprofessional web sites
As more and more web sites need to
be able to handle huge amounts ofdata, there will be an increased needto be able to build professional sites
incorporating NoSQL solutions
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected] -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
8/21
4/28/12
How Spring & MongoDBFit Together
Servlet Engine (e.g. Tomcat)
Controller LayerFront
Controller(Spring
Dispatcher)
Controller
Request
/Response
Servic
eLayer
DAO Layer
Mongo
Repository
iRepository
Mongo DB
Spring enables completeconfiguration of the Controller,Service, DAO Layer and facilitatesconnection to Mongo DB
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected] -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
9/21
4/28/12
Getting Started
This overview does not cover detailsof setting up a Spring MVC app, andwill assume a working knowledge of
the framework
Only the configuration to connect anexisting Spring MVC app will be
covered in detail
Before proceeding, install MongoDB full details are available:
http://www.mongodb.org/display/DOCS/
mailto:[email protected]://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
10/21
4/28/12
Domain Objects
Similar to using JPA(Hibernate, etc)the first step is to model theunderlying Domain objects you want
to use to model the applicationsunderlying meta-data.
Using Spring Data
we can model ourdomain using POJOsand annotations.
http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
11/21
4/28/12
Domain Objects
@Document annotation on the rootDocument object
@Id on any member variable to beused as an identifier for the object(must be String/int/long)
The @Id field must either be namedid, or the annotation used incombination with aMappingConverter
http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
12/21
-
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
13/21
4/28/12
Data Access TheRepository
Core CRUD functionality can beachieved out-of-the-box by extendingthe MongoRepository class
This provides save(), findAll(),findOne() and delete() methods
that can be used on our @Document
object (in our case Resume.java)
http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
14/21
4/28/12
Data Access TheRepository
Our Repository interface can easilybe extended to include custommethods, and the MongoTemplate
class provides an API to createcustom queries:
mongoTemplate.find(COLLECTION_NAME, newQuery(Criteria.where(name).is(searchTerm)), Resume.class);
Criteria allows querying by any fieldn m in n m nt
http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
15/21
4/28/12
Service Layer
The majority of the MongoDBimplementation is abstracted to theData Access layer through the
MongoRepository There is no real change in the
Service or Controller Layers to the
normal Spring MVC approach In the Service class we can just auto-
wire the Repository Interface in to
the class just like we would normally
http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
16/21
4/28/12
Configuration
-
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
17/21
4/28/12
Deploying toCloudFoundry
Sign up for your freeCloudFoundry account(currently in Beta, so it may
take time for your accountdetails) athttp://www.cloudfoundry.com/
Install the latest STS Eclipse buildand CloudFoundry extensions (fulldetails here:
http://blog.springsource.com/2011/04/1
http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.cloudfoundry.com/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://www.cloudfoundry.com/ -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
18/21
4/28/12
App Config forCloudFoundry
A change to your application config isneeded to support access toCloudFoundry MongoDB service
Notice the only change is themongoDbFactory bean is being
instantiated with no constructor
http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/ -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
19/21
4/28/12
ConfiguringCloudFoundry
In the Servers tab, double-click the deployed applicationto open the Applications tab
In the Services section of theApplications tab, select theAdd Service button, selectMongoDB and name theservice appropriately
Once the MongoDB servicehas been created, click anddrag it in to the ApplicationServices tab
http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/ -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
20/21
4/28/12
Thoughts
NoSQL is growing in popularity but isnot intended to be a replacement forRDBMS
NoSQL should be considered asanother tool in the arsenal RDBMSis not going anywhere!
Database technology choice shouldbe driven by the requirements of theproblem Document oriented have
specific applications
http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/ -
8/3/2019 hands-onnosql-110818092713-phpapp01 (1)
21/21
4/28/12
Appendix
Full source code for the application isavailable fromhttp://automateddeveloper.blogspot.co
Feel free to drop me an email or
come by to the blog and leave a
comment if you have any questionsor feedback
http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://automateddeveloper.blogspot.com/http://automateddeveloper.blogspot.com/