Date post: | 08-Jan-2017 |
Category: |
Technology |
Upload: | red-pill-now |
View: | 160 times |
Download: | 0 times |
Getting Your Hands On Graphs
Nathan T FreemanChief Software Architect
Why Framed Graphs• Performance• Flexibility• Ease of Use• Low Risk
Today’s Mission• Help you understand the power of
GraphNSF• Show you concrete examples• Avoid making your brain hurt– But please understand, we’re drinking from a
firehose for two hours– This is all I’ve done since 2014
Quick Graph Review• Graphs are collections of vertices & edges• Vertices are the entities of interest• Edges are the relationships between them• Vertices have whatever properties you
want to give them• So do Edges• There are no indices to define relationships• In fact there are no indices at all
Quick Framed Graph Review• Framed Graphs map Java objects to
Vertices & Edges• No classes required; all implementation is
synthetic via interfaces• Uses @annotations to define model rules• Specific implementations are optional and
extensible• Best expressed with Vertices as nouns,
Edges as verbs
What GraphNSF Does to Notes Data• Virtualization layer via Java plugin• All NSFs can be included in a contiguous
data set• On-demand• 4 models for all contents:– It’s a Document db– It’s a Map db– It’s a Graph db– It’s a Java object db (with schemas!)
Framed Graph Example• Event vertex: MWLUG• Presentation vertex: Hands on
Graphs• Person vertex: Nathan T Freeman• Person vertex: Bob Kadrie• Person vertex: Devin Olson• HappensAt edge• Presents edge• Attends edge
MWLUG
Hands on Graphs
Bob Kadrie
Devin Olson
Nathan Freeman
Movie vertex: Suicide SquadActor vertex: Will SmithActor vertex: Margot RobbieStarsIn edgeMovie vertex: FocusActor vertex: Jared LetoCharacter vertex: JokerPortrays edgeActor vertex: Heath LedgerCharacter vertex: Will SmithAppearsIn edge
r
Today’s Plan – Org Chart Graph
EnterprisePerson
DepartmentPosition
EmployedAt
ReportsInto
DivisionOfAssignedTo
Manages
ReportsTo
Enterprise Vertex• Name–@Property, @TypedProperty, @TypeValue
• Adjacent Departments–@Adjacent, @AdjacentUnique
• Adjacent Persons
Person Vertex• First Name• Last Name• Email• Phone• Adjacent Enterprise• Adjacent Positions
Department Vertex• Name• Adjacent Departments (sub-departments)• Adjacent Department (parent department)• Adjacent Positions• Adjacent Manager Position
Position Vertex• Title• Description• Adjacent Department• Adjacent Persons (Reports)• Adjacent Person (Boss)
A look back at edges• EmployedAt– Start date– End date–@InVertex, @OutVertex–@Incidence, @IncidenceUnique
• AssignedTo– Start date– End date
Assembling the plugin• IGraphFactory interface• Extension point• Defining ElementStores• Naming our Graph
We have a Graph. What next?
Everything begins with a Vertex• Start at the top• Start with me• Start with a search
From there we branch out• Given a vertex, iterate adjacency until you
get what you need• Example: Find X’s peers• Example: Find grandboss• Example: Find everyone in department
ODA REST API• Based on DAS (Had to modify IBM’s code a
little)• Currently frames only• Other modes coming (or you can start
writing!)
REST API Basics• Hey, I wrote some documentation!– https://wiki.openntf.org/display/ODA/How+to
+use+the+ODA+REST+API– Okay, Keith helped
• http://server/api/oda/frames/mwlug– Route to collections
• http://server/api/oda/frame/mwlug– Route to elements
REST API Supported Methods• GET, POST, PUT, DELETE, PATCH• GETs use query parameters• DELETEs use query parameters• POST, PUT, PATCH use JSON payloads
REST API Common GET params• /frames/– ?type=[namespace]– &key=[string]– &filterkey/filtervalue, &partialkey/partialvalue,
&startskey/startsvalue– &orderby=[property list (comma-separated)]
• /frame/– ?id=[identifier]– &edges– &label=[edge label list (comma-separated]– &orderby=[property list (comma-separated)]
– &vertices
REST API Common POST params• /frames/ - none. Only payload• /frame/– ?id=[identifier]– Payload is one or more edges
REST API Common PUT params• /frames/ - none• /frame/– ?id=[identifier]– Payload is complete vertex/edge contents
REST API Common PATCH params• /frames/– Payload is JSON Array of updates
• /frame/– ?id=[identifier]– Payload is delta-only for vertex or edge
REST API Common DELETE params• /frames/ - none• /frame/– ?id=[identifiers (comma-separated)]
REST API Demos
Advanced Stuff• We already have Persons• They are in the Directory!• Can we put the Directory in the graph?
The Problem• When we create edges between vertices,
the vertices are modified.• This could mean a LOT of updates to the
Directory in an active graph• Lots of updates to the Directory is double
plus bad
The Solution: Proxy Vertices• Proxies can be configured per Element
Store• Create mirror documents per vertex to hold
graph info• Non-graph properties are passed through
to original• DirPerson Vertex• BoundTo Edge
Custom Key Resolvers• How would we like to find Persons?• Notes persons: canonical name• Create a Java implementation to discover
document vertex• Demo
Now we have a directory (ho ho ho)• That means we have Views• Let’s use them!• Why? Because we can!
View Vertices• All View Design notes are Framed Vertices• All View Categories are Framed Vertices• All ViewEntries are Framed Edges (View ->
Category, Category -> Document)