4/12/19

Dealing with architecture models and views using graph databases like Neo4j

(I'll be updating this intro with additional explanations & insights, so check this post regularly)

In my work as an architect I'm dealing with quite large architectures, modeling them in Archimate and UML. Having an architecture model is only step 1, using it in an effective way is really important and is gives much more challenges. Usually, a collection of usefull architecture views are defined to illustrate the architecture from the point of view of the stakeholders. The Archimate standard provides a set of views and the 4+1 architectural view model as well. But when architectures are getting more extensive and more dynamic, you'll more often find yourself needing a powerful way of "searching" and "selecting" relevant elements in an architecture model. For example, when determining impact of architectural changes, this may be the case. Since architectures can be stored in databases (e.g. by using plugins like the Database export/import plugin for Archi), you should be able to query them, hence creating dynamic architecture views.

Querying a relational database

I have done some research on this and found out that querying a relational database isn't that efficient. You can look on an architecture model as a collection of element (types) interconnected with each other. Each architecture element can have a relation of some kind with another element. For example: a service has a assignment relation with an application interface that has a realization relation with an application that can have serving relations with other applications. Finding all services that in some way are influences by infrastructure processes, for example, is not that easy. An architecture is actually a network that is hard (inefficient) to query on using a relational database using, for example, joins or procedures. This is caused by the concept of a relational database that just isn't suitable for models that look like networks of interconnected elements. Luckily, the Database export/import plugin for Archi also supports Neo4j, a graph database, which seems to be more suitable for this. Graph databases like Neo4j actually provide an excellent way of displaying complex architectures in which there exist many connections between elements.

So what is a graph database? And what is Neo4j?

A graph database is a type of NoSQL database that uses graph theory to store, map and query relationships. This is essentially a collection of nodes and edges that needs to be queried. Each node represents an entity and each edge represents a connection or relationship between two nodes. Graph databases are very well suited for analyzing networks, e.g. to mine data from social media.

Neo4j is a graph database management system. It can be described as an ACID-compliant transactional database with native graph storage and processing.

Neo4j databases can be queried by using a special query language: Cypher.

The Cypher Query Language

Cypher is a declarative language for expressive and efficient querying and maintaining a property graph. It's based on the Property Graph Model, based on elements of nodes and edges (relationships between elements) and labels and properties that can be added to them.

An example query for Actors in one of the example Neo4j databases available is:

MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie

You'll find some nice instructive video's on Graph Databases on YouTube...

Intro to Graph Databases Episode #5 - Cypher, the Graph Query Language



More in this series:
  • Intro to Graph Databases Episode #1 - Evolution of DBs
  • Intro to Graph Databases Episode #2 - Properties of Graph DBs & Use Cases
  • Intro to Graph Databases Episode #3 - Property Graph Model
  • Intro to Graph Databases Episode #4 - (RDBMS+SQL) to (Graphs+Cypher)
  • Intro to Graph Databases Episode #5 - Cypher, the Graph Query Language
  • Intro to Graph Databases Episode #6 - Continuing with Cypher

See: https://www.youtube.com/playlist?list=PLSiMhBs48YvXpvmWiUNeThqxOikTH1Zy4

Further study

Do you want to read more on the topics in this post or play around with the technology? Here are some links…

On Graph databases:
What is a Graph Database? https://neo4j.com/developer/graph-database
Graph Databases for Beginners: Why Graph Technology Is the Future: https://neo4j.com/blog/why-graph-databases-are-the-future
Graph database: https://en.wikipedia.org/wiki/Graph_database
Instructive video's on Graph Databases: https://www.youtube.com/playlist?list=PLSiMhBs48YvXpvmWiUNeThqxOikTH1Zy4

On Neo4j:
Neo4j (GitHub repo): https://github.com/neo4j/neo4j
Neo4j homepage: https://neo4j.com/
Fred's GitHub repo (explanation, examples, in Dutch): https://gitlab.com/fredvn-woensdagavond/neo4j-2018-12
Neo4j Sandbox (handson labs, built-in guides and sample datasets for popular use cases): https://neo4j.com/sandbox-v2

On Cypher Query Language:
Cypher Query Language: https://en.wikipedia.org/wiki/Cypher_Query_Language
Cypher Query Language: https://neo4j.com/developer/cypher-query-language/
Learn Cypher in minutes: https://learnxinyminutes.com/docs/cypher

Examples:
The Graph of Thrones [Season 7 Contest]: https://neo4j.com/blog/graph-of-thrones/
Dataset: Movie Database: https://neo4j.com/developer/movie-database/#_the_dataset
Exploring a UK Open Government Dataset with Neo4j: https://leanjavaengineering.wordpress.com/2015/04/10/exploring-a-uk-open-government-dataset-with-neo4j

On related topics:
4+1 architectural view model: https://en.wikipedia.org/wiki/4%2B1_architectural_view_model
Database export/import plugin that store Archi models in a central database repository: https://github.com/archi-contribs/database-plugin
threejs (cross-browser JavaScript library and Application Programming Interface (API) used to create and display animated 3D computer graphics): https://threejs.org/

No comments:

Post a Comment