Architecture

Graphlytic is a web application which is accessible in web browser. It uses Neo4j graph database.

Graphlytic

Graphlytic is a web application implemented in Java. Web application is delivered with Jetty Web server and can be started directly without deployment to any web server. Frontend of Graphlytic uses HTM5, JS, CSS.

Neo4j Server

Graphlytic uses Neo4j database as base data storage. You can use existing Neo4j database or install a new one. If you use exiting database be careful that Graphlytic stores some custom data into Neo4j database. Existing data stays unchanged because Graphlytic don't execute any change to existing data if it is not required by user. For better safety and data separation we recommend to use separate Neo4j database to work with Graphlytic.

Communication

Browser communicate with Graphlytic over HTTP or HTTPS. Graphlytic uses Bolt or REST protocol to communicate with Neo4j Server. Communication between Graphlytic and Neo4j Graphlytic Plugin is possible only through REST and it is not possible through Bolt (see more in next chapter).

Read security to know more about securing connections.

images/download/attachments/8356366/graphlytic_architecture.png

Neo4j plugin

Graphlytic requires some advanced features which are not delivered with Neo4j. There is plugin a for Neo4j delivered with Graphlytic installation package and should be copied into Neo4j during installation. Plugin extends Neo4j ServerPlugin API and uses REST interface. Plugin is not implemented as Neo4j Procedure because Neo4j Procedure doesn't allow to create new transactions and/or spawning threads which is required by this plugin. This means that communication with this plugin is possible only through REST and it is not possible through Bolt.

Indexer

It uses Neo4j indexes but make some logic to get required fulltext and sort functionality. Stores which fields has to be indexed and provide automatic indexing during commit phase. Searching in this index takes ACL rules into account. Search returns only nodes and relationships which are permitted for current Graphlytic user.

Indexing is not using fulltext configuration which can be done in Neo4 configuration file because configuration of indexer should be done in GUI of Graphlytic during runtime of Graphlytic. Check Node index or Relationship index to see how to configure indexer.

Shortest Path

Find shortestPath with ACL rules. Found shortest path contains only nodes and relationships which are permitted for current Graphlytic user. This functionality is in the plugin for performance reason.

Data audit

Audit data changes into log file. Every change (create, update, delete) of data nodes and relationship is written into log file. This can be disabled by configuration (see Logging chapters in installation manual).

Widgets

Graphlytic functionality can be extended by widgets. You can create and deploy your own widgets. Widget is group of javascript, css and html files. Be careful about content of these custom files because deploy of these files can cause security vulnerability of Graphlytic.

ETL engine

Graphlytic contains ETL engine uses HSQL database to store information about jobs. HSQL is embedded in Graphlytic and it starts automatically when Graphlytic is started.

ETL engine contains several drivers for databases: Postgresql, MySQL, MSSQL, Oracle, DB2, Derby, H2, HSQLDB, Sybase, XSL. Not all JDBC drivers are included in Graphlytic.

ETL engine contains other drivers: CSV, Neo4j, Mail, Groovy, Log, Text, XPath and more. ETL engine is configured in XML.

Using combination of driver you can create many scenarios. Here is a small overview of using scenarios which can be configured. Some examples are in Administration manual (see ETL job examples).

images/download/thumbnails/8356366/etl_1.png

Example 1: Load data from SQL database by SQL query and insert every record of result into CSV file.

images/download/thumbnails/8356366/etl_2.png

Example 2: Load data from CSV into Neo4j using Cypher (LOAD CSV command).

images/download/attachments/8356366/etl_3.png

Example 3: Load data from SQL database by SQL query, transform every record of result by Groovy (for example remove special characters) then insert every transformed record into CSV file. After this load data from CSV into Neo4j using Cypher (LOAD CSV command).

images/download/attachments/8356366/etl_4.png

Example 4: Load data from Neo4j using Cypher query, transform every record of result by Groovy and append every record into result string. Send string as html mail to several recipients.