1 icfi.com | mongodb and spring data august 8 th, 2012 prepared for: the java™ metroplex users...

40
1 icfi.com | MongoDB and Spring Data August 8 th , 2012 Prepared for: THE JAVA™ METROPLEX USERS GROUP

Upload: reid-leppert

Post on 16-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

1icfi.com |

MongoDB and Spring Data

August 8th, 2012

Prepared for:

THE JAVA™ METROPLEX USERS GROUP

2icfi.com |

Integrated ServicesICF IRONWORKS

Interactive

Portal + Content

ManagementBusiness +

IT Alignment

Interactive

Developing creative ideas and engaging audiences through Web, Mobile, and Social Media

• User + Industry Research

• Web Analytics

• Digital Strategy + Planning

• Mobile Strategy + Execution

• Search Marketing

• Rich Media Development

• Social Media + Monitoring

• Information Architecture + Usability

• Creative Design

Portal + Content Management

Building Internet-based systems to share content, knowledge, and data

• Portal

• Enterprise Content

• Management

• Search

• E-Commerce

• Custom Application Development

• Systems Integration

• Cloud Services

• Application + Platform Management

Business + IT Alignment

Developing practical strategies to help clients improve business performance

• Program + Portfolio

• Management

• IT Strategy and Roadmap

• Technology Selection

• Business Process Improvement

• Governance

• Business Intelligence

3icfi.com |

ICF Ironworks has experience in the following market-leading platforms:• Microsoft • Ektron• Autonomy Interwoven• Oracle UCM and WebLogic Portal• Alfresco• SiteCore• Percussion• IBM WebSphere

We leverage our strategic partnerships to enhance the services we provide to our clients and to build on our sales pipeline

ICF Ironworks is one of 34 Microsoft National Systems Integrators (NSI)

Partnerships and Platform ExpertiseICF IRONWORKS

4icfi.com |

Government

Non-Profit/Assn Financial Energy

Mfg/Retail/DistributionHealthcare

ICF IRONWORKS

5icfi.com |

Who Am I?

Java Solutions Architect with ICF Ironworks

Adjunct Professor

Started with HTML and Lotus Notes in 1992• In the interim there was C, C++, VB, Lotus Script, PERL, LabVIEW,

etc.

Not so much an Early Adopter as much as a Fast Follower of Java Technologies• Learned Java 1.1 in 1997, J2EE in 1999

Alphabet Soup (MCSE, ICAAD, ICASA, SCJP, SCJD, PMP, CSM)

LinkedIn: http://www.linkedin.com/in/iamjimmyray

Blog: http://jimmyraywv.blogspot.com/ Avoiding Tech-sand

6icfi.com |

MongoDB and Spring Data

7icfi.com |

Tonight’s Agenda

Quick introduction to NoSQL and MongoDB• Configuration• MongoView

Introduction to Spring Data and MongoDB support• Spring Data and MongoDB configuration• Templates• Repositories

• Query Method Conventions• Custom Finders• Customizing Repositories

• Metadata Mapping (including nested docs and DBRef)• Aggregation Functions• GridFS File Storage• Indexes

8icfi.com |

What is NoSQL?

Official: Not Only SQL• In reality, it may or may not use SQL, at least in its truest form• Varies from the traditional RDBMS approach of the last few decades• Not necessarily a replacement for RDBMS; more of a solution for more

specific needs where is RDBMS is not a great fit• Content Management (including CDNs), document storage, object storage,

graph, etc.

It means different things to different folks.• It really comes down to a different way to view our data domains for

more effective storage, retrieval, and analysis

9icfi.com |

From NoSQL-Database.org

“NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable. The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more.”

10icfi.com |

Some NoSQL Flavors

Document Centric• MongoDB• Couchbase

Wide Column/Column Families• Cassandra• Hadoop Hbase

XML• MarkLogic

Graph• Neo4J

Key/Value Stores• Redis

Object• DB4O

Other• LotusNotes/Domino

11icfi.com |

Why MongoDB

Open Source (written in C++)

Multiple platforms (Linux, Win, Solaris, Apple) and Language Drivers

Explicitly de-normalized

Document-centric and Schema-less

Fast (low latency)• Fast access to data• Low CPU overhead

Ease of scalability (replica sets), auto-sharding

Manages complex and polymorphic data

Great for CDN and document-based SOA solutions

Great for location-based and geospatial data solutions

12icfi.com |

Why MongoDB (more)

Because of schema-less approach is more flexible, MongoDB is intrinsically ready for iterative (Agile) projects.

Eliminates “impedance-mismatching” with typical RDBMS solutions

If You are already familiar with JavaScript and JSON, this is an easy database to understand.

13icfi.com |

What is schema-less?

A.K.A. schema-free

It means that MongoDB does not enforce a column data type on the fields within your document, nor does it confine your document to specific columns defined in a table definition.

The schema is actually controlled via the application API layers and is implied by the “shape” (content) of your documents.

This means that different documents in the same collection can have different fields.• So the schema is flexible in that way• Only the _id field is mandatory in all documents.

Requires more rigor on the application side.

14icfi.com |

Why Not MongoDB

High speed and deterministic transactions:• Banking and accounting

Where SQL is absolutely required• Where Joins are needed

Traditional non-real-time data warehousing ops

If your organization lacks the controls and rigor to place schema and document definition at the application level without compromising data integrity

15icfi.com |

MongoDB

Was designed to overcome some of the performance shortcomings of RDBMS

Some Features• Fast Querying• In place updates• Full Index support (including compound indexes)• Replication/High Availability (see CAP Theorem)• Auto Sharding for scalability• Aggregation, MapReduce• GridFS

16icfi.com |

CAP Theorem

Consistency

Availability

Partition Tolerance (network partition tolerance)

You can never have all three, so you plan for two and make the best of the third.• For example: Perhaps “eventual consistency” is OK for a CDN

application.

17icfi.com |

Container Models: RDBMS vs. MongoDB

RDBMS: Servers > Databases > Schemas > Tables > Rows• Joins

MongoDB: Servers > Databases > Collections > Documents• No Joins, Db References, Nested Documents, de-normalization

• Embedding and Linking

18icfi.com |

MongoDB Collections

Schema-less

Can have up to 24000 (according to 10gen)• Cheap to resource

Contain documents (…of varying shapes)

19icfi.com |

MongoDB Documents

JSON (what you see)• Actually BSON (Internal - Binary JSON - http://bsonspec.org/)

Elements are name/value pairs

16 MB maximum size

What you see is what is stored• No default fields (columns)

20icfi.com |

Why BSON?

Adds data types that JSON did not support

Optimized for performance

Adds compression

21icfi.com |

MongoDB Install

Extract MongoDB

Build config file, or use startup script

Start Mongod (daemon) process

Use Shell (mongo) to access your database

Use MongoVUE for GUI access and to learn shell commands

22icfi.com |

Mongo Shell

In Windows, mongo.exe

Command-line interface to MongoDB (sort of like SQL*Plus for Oracle)

23icfi.com |

MongoVUE

GUI around MongoDB Shell

Makes it easy to learn MongoDB Shell commands• db.employee.find({ "lastName" : "Smith", "firstName" :

"John" }).limit(50);• show collections

Demo…

24icfi.com |

Web Admin Interface

Localhost:28017

Quick stats viewer

Run commands

Demo

25icfi.com |

Spring Data

Large Spring project with many subprojects• Category: Document Stores, Subproject MongoDB

“…aims to provide a familiar and consistent Spring-based programming model…”

Like other Springs, Data is POJO Oriented

Provides high-level API and access to low-level API for managing MongoDB documents.

Provides annotation-driven meta-mapping

Will allow you into bowels of API if you choose to hang out there

26icfi.com |

Spring Data MongoDB Templates

Implements MongoOperations (mongoOps) interface• mongoOps defines the basic set of MongoDB operations for the Spring

Data API.• Wraps the lower-level MongoDB API

Provides access to the lower-level API

27icfi.com |

Spring Data MongoDB Templates - Configuration

See mongo-config.xml

28icfi.com |

Spring Data MongoDB Templates - Configuration

Or…see the config class

29icfi.com |

Spring Data Repositories

Convenience for data access• Spring does ALL the work

Convention over configuration

Hides complexities of Spring Data templates and underlying API

Builds implementation for you based on interface design• Implementation is built during Spring container load.

Is typed (parameterized via generics) to the model objects you want to store.• When extending MongoRepository• Otherwise uses @RepositoryDefinition

30icfi.com |

Spring Data Meta Mapping

Annotation-driven mapping of model object fields to Spring Data elements in specific database parlance.

31icfi.com |

MongoDB DBRef

Optional

Instead of nesting documents

Have to save the “referenced” document first, so that DBRef exists before adding it to the “parent” document

32icfi.com |

MongoDB Custom Spring Data Repositories

Hooks into Spring Data bean type hierarchy that allows you to add functionality to repositories

Important: You must write the implementation for this custom repository, using the class name for the Spring Data generated class

And…your Spring Data repository interface must extend this custom interface

Demo

33icfi.com |

MongoDB Advanced Queries

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all

Demo - $in, $nin, $gt, $all

34icfi.com |

MongoDB Aggregation Functions

Aggregation Framework

Map/Reduce

Distinct - Demo

Group - Demo• Similar to SQL Group By function

Count

35icfi.com |

MongoDB GridFS

“…specification for storing large files in MongoDB.”

As the name implies, “Grid” allows the storage of very large files divided across multiple MongoDB documents.• Uses native BSON binary formats

16MB per document• Will be higher in future

Large files added to GridFS get chunked and spread across multiple documents.

36icfi.com |

MongoDB Indexes

Similar to RDBMS Indexes

Can have many

Can be compound

Makes searches, aggregates, and group functions faster

Makes writes slower

Sparse = true• Only include documents in this index that actually contain a value in the

indexed field.

37icfi.com |

MongoDB Security

Default is trusted mode, no security

--auth

--keyfile• Replica sets require this option

38icfi.com |

MongoDB Encryption

MongoDB does not support data encryption, per se

Use application-level encryption and store encrypted data in BSON fields

Or…use TDE (Transparent Data Encryption) from Gazzang

39icfi.com |

Helpful Links

Spring Data MongoDB - Reference Documentation: http://static.springsource.org/spring-data/data-mongodb/docs/1.0.2.RELEASE/reference/html/

http://nosql-database.org/

www.mongodb.org

http://www.mongodb.org/display/DOCS/Java+Language+Center

http://www.mongodb.org/display/DOCS/Books

http://openmymind.net/2011/3/28/The-Little-MongoDB-Book/

http://jimmyraywv.blogspot.com/2012/05/mongodb-and-spring-data.html

http://jimmyraywv.blogspot.com/2012/04/mongodb-jongo-and-morphia.html

https://www.10gen.com/presentations/webinar/online-conference-deep-dive-mongodb

40icfi.com |

Questions