A tool to migrate an existing database to a graph database
Перейти к файлу
Abbas Cyclewala 19e90667d6
Feature/stream support (#2)
* added gremlincmd stream writer

* fixed streaming logic

* fixed upsert query in gremlinDb output

* Fixed vulnerability issues and fixed schema

* removed comment
2019-10-20 20:30:32 +05:30
.vscode Added streaming changes 2019-06-17 16:12:00 +05:30
__tests__ initial commit 2019-01-27 16:54:40 +05:30
src Feature/stream support (#2) 2019-10-20 20:30:32 +05:30
types Added streaming changes 2019-06-17 16:12:00 +05:30
.editorconfig initial commit 2019-01-27 16:54:40 +05:30
.gitignore Feature/stream support (#2) 2019-10-20 20:30:32 +05:30
.npmignore initial commit 2019-01-27 16:54:40 +05:30
CONTRIBUTING.md initial commit 2019-01-27 16:54:40 +05:30
LICENSE Initial commit 2019-01-22 23:22:36 -08:00
README.md initial commit 2019-01-27 16:54:40 +05:30
package-lock.json Feature/stream support (#2) 2019-10-20 20:30:32 +05:30
package.json Feature/stream support (#2) 2019-10-20 20:30:32 +05:30
tsconfig.json Added streaming changes 2019-06-17 16:12:00 +05:30
tslint.json Feature/stream support (#2) 2019-10-20 20:30:32 +05:30

README.md

Migrate To Graph

This tool allows you to migrate existing database to a graph database

Conversions supported:

  • json to gremlin
  • json to graph
  • sql to graph

Installation (CLI)

npm i -g migrate-to-graph

Usage (CLI)

Usage: migrate-to-graph [options] [command]

Options:

  -V, --version                           output the version number
  -h, --help                              output usage information

Commands:

  jsontogremlin <inputFile> <templateFile> <outputFile>
  jsontograph <inputFile> <templateFile> <graphConfigFile>
  sqltograph <sqlConfigFile> <query> <templateFile> <graphConfigFile>

Installation (Lib)

npm i --save migrate-to-graph

Usage (Lib)

  var graphtool = require('migrate-to-graph');
  var result = graphtool.jsonToGraph(json,template);

   //or ES6
  import {jsonToGraph} from 'migrate-to-graph';

SQL Config File

{
  "dialect":"mssql",  //dialect to use, 'mysql'|'sqlite'|'postgres'|'mssql'
  "username": "test",
  "password": "password",
  "host": "server",
  "database": "database",
    "options": {
        "encrypt": true   //set to true if you need encryption
    }
}

Graph Config File

{
  "host":"server",
  "password":"password",
  "user": "username",
  "port": "443",
  "ssl": true,
  "batchSize": 10,  //No. of gremlin queries to execute in parallel (Default: 10)
  "upsert": false //Set to true if you want to upsert vertices or edges (Default: false)

}

Note: For Azure cosmos graph DB , user is '/dbs/{dbName}/colls/{collectionName}' and password is its secretKey

Template

To transform data to a graph, you need to transform the data into vertex and edge format.

Using a template you can convert a single data object into one/many vertexes and edges

We use handlebars to convert input to vertex / edge format

Example

template:

{
  "vertices":[
    {
      "id": "{{myId}}",
      "label": "vertexLabel",
      "properties":{
        "name": "{{myName}}"
      }
    },
    {
      "id": "{{myFriendId}}",
      "label": "vertexLabel",
      "properties":{
        "name": "{{myFriendName}}"
      }
    }
  ],
  "edges":[
    {
      "label": "friend",
      "from": "{{myId}}",
      "to": "{{myFriendId}}",
      "properties": {
        "value" : {{friendshipLvl}}
      }
    }
  ]
}

Note: You can specify as many vertices and edges as you want as long as it transforms to Vertex-Edge format

Input Data(a single entity from array of data):

  {
    "myId": "1",
    "myName": "abc",
    "myFriendId": "2",
    "myFriendName": "xyz",
    "friendshipLvl": 3
  }

Transformed Data:

{
  "vertices":[
    {
      "id": "1",
      "label": "vertexLabel",
      "properties":{
        "name": "abc"
      }
    },
    {
      "id": "2",
      "label": "vertexLabel",
      "properties":{
        "name": "xyz"
      }
    }
  ],
  "edges":[
    {
      "label": "friend",
      "from": "1",
      "to": "2",
      "properties": {
        "value" : 3
      }
    }
  ]
}

Vertex-Edge Format

This is a custom format inspired from the way Azure Cosmos Graph DB stores data. We use this format to convert it to gremlin queries so you need to provide a template which transforms to vertex-edge format

Model for Vertex and Edge

export interface Vertex {
  id: string;  
  label: string;   //label for the vertex
  type: 'vertex';
  properties: {
    [key: string]: any;  //Represents all the properties you wish to add to the vertex
  };
}

export interface Edge {
  id?: string;
  label: string;  //label for the edge
  type: 'edge';
  to: string;   //id of vertex from which you want the edge to start
  from: string; //id of vertex to which you want the edge to end
  properties?: {
    [key: string]: any; //Represents all the properties you wish to add to the edge
  };
}

Vertex-Edge Format expects you specify an array of vertices and edges

{
  "vertices":[
    {
      "id": "1",
      "label": "vertexLabel",
      "properties":{
        "name": "abc"
      }
    },
    {
      "id": "2",
      "label": "vertexLabel",
      "properties":{
        "name": "xyz"
      }
    }
  ],
  "edges":[
    {
      "label": "friend",
      "from": "1",
      "to": "2",
      "properties": {
        "value" : 3
      }
    }
  ]
}