Replication Example: Chain Topology

Introduction

The following How-To walks you through setting up Virtuoso RDF Graph Replication in a Chain Topology.



Prerequisites

Database INI Parameters

Suppose there are 3 Virtuoso instances respectively with the following ini parameters values:

  1. virtuoso1.ini:

    ... [Database] DatabaseFile = virtuoso1.db TransactionFile = virtuoso1.trx ErrorLogFile = virtuoso1.log ... [Parameters] ServerPort = 1111 SchedulerInterval = 1 ... [HTTPServer] ServerPort = 8891 ... [URIQA] DefaultHost = localhost:8891 ... [Replication] ServerName = db1 ...

  2. virtuoso2.ini:

    ... [Database] DatabaseFile = virtuoso2.db TransactionFile = virtuoso2.trx ErrorLogFile = virtuoso2.log ... [Parameters] ServerPort = 1112 SchedulerInterval = 1 ... [HTTPServer] ServerPort = 8892 ... [URIQA] DefaultHost = localhost:8892 ... [Replication] ServerName = db2 ...

  3. virtuoso3.ini:

    ... [Database] DatabaseFile = virtuoso3.db TransactionFile = virtuoso3.trx ErrorLogFile = virtuoso3.log ... [Parameters] ServerPort = 1113 SchedulerInterval = 1 ... [HTTPServer] ServerPort = 8893 ... [URIQA] DefaultHost = localhost:8893 ... [Replication] ServerName = db3 ...

Database DSNs

Use the ODBC Administrator on your Virtuoso host (e.g., on Windows, Start menu -> Control Panel -> Administrative Tools -> Data Sources (ODBC); on Mac OS X, /Applications/Utilities/OpenLink ODBC Administrator.app) to create a System DSN for each of db1, db2, db3, with names db1, db2 and db3, respectively.

Install Conductor package

On each of the 3 Virtuoso instances install the conductor_dav.vad package.

Create Publication on db1

  1. Go to http://localhost:8891/conductor and log in as dba
  2. Go to Conductor -> Replication -> Transactional -> Publications



  3. Click Enable RDF Publishing
  4. As result publication with the name RDF Publication should be created



  5. Click the link which is the publication name.
  6. The publication items page will be shown:



  7. Enter for Graph IRI:

    http://example.org





  8. Click Add New
  9. The item will be created and shown in the list of items for the currently viewed publication.



Create subscription from db2 to db1's Publication

  1. Log in at http://localhost:8892/conductor.
  2. Go to Replication -> Transactional -> Subscriptions:



  3. Click New Subscription:



  4. From the list of "Specify new data source" select Data Source db1:



  5. Enter for db1 dba user credentials:



  6. Click "Add Data Source":
  7. As result db1 will be shown in the "Connected Data Sources" list.



  8. Click "Publications list":



  9. As result will be shown the list of available publications for the selected data source. Select the one with name "RDF Publication" and click "List Items".



  10. As result will be shown the "Confirm subscription" page.



  11. The sync interval by default is 10 minutes. For the testing purposes, we will change it to 1 minute.



  12. Click "Subscribe".
  13. The subscription will be created.



Create Publication on db2

  1. Go to http://localhost:8892/conductor and log in as dba,
  2. Go to Conductor -> Replication -> Transactional -> Publications:



  3. Click Enable RDF Publishing:
  4. As result publication with the name RDF Publication should be created:



  5. Click the link which is the publication name.
  6. The publication items page will be shown:



  7. Enter for Graph IRI:

    http://example.org





  8. Click Add New.
  9. The item will be created and shown in the list of items for the currently viewed publication.



Create subscription from db3 to db2's Publication

  1. Log in at http://localhost:8893/conductor.
  2. Go to Replication -> Transactional -> Subscriptions:



  3. Click New Subscription:



  4. From the list of "Specify new data source" select Data Source db2:



  5. Enter for db2 dba user credentials:



  6. Click "Add Data Source":



  7. As result db2 will be shown in the "Connected Data Sources" list. Select it and click "Publications list":



  8. As result will be shown the list of available publications for the selected data source. Select the one with name "RDF Publication" and click "List Items".



  9. As result will be shown the "Confirm subscription" page.



  10. The sync interval by default is 10 minutes. For the testing purposes, we will change it to 1 minute.



  11. Click "Subscribe".
  12. The subscription will be created.



Insert Data into a Named Graph on the db1 Virtuoso Instance

  1. Log in at http://localhost:8891/conductor.
  2. Go to Linked Data-> Quad Store Upload:



  3. In the shown form:
    1. Tick the box for Resource URL and enter your resource URL, e.g.:

      http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this

    2. Enter for Named Graph IRI:

      http://example.org





  4. Click Upload.
  5. Should be shown message for successful upload:



  6. Check the count of the inserted triples by executing a query like the following against the SPARQL endpoint, http://localhost:8891/sparql:

    SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o }





  7. Should be shown 57 as total.



Check data on the Destination instances db2 and db3

  1. To check the starting count, on each of the Destination Virtuoso Instances db2 and db3 from SPARQL Endpoint execute:

    SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o }

  2. Should return 57 as total.



Add new data on db1

  1. Disconnect db2 and db3.
  2. On the Host Virtuoso Instance db1 go to Conductor -> Database -> Interactive SQL enter the following statement:

    SPARQL INSERT INTO GRAPH <http://example.org> { <http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this> <http://xmlns.com/foaf/0.1/interest> <http://dbpedia.org/resource/Web_Services> } ; SPARQL INSERT INTO GRAPH <http://example.org> { <http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this> <http://xmlns.com/foaf/0.1/interest> <http://dbpedia.org/resource/Web_Clients> } ; SPARQL INSERT INTO GRAPH <http://example.org> { <http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this> <http://xmlns.com/foaf/0.1/interest> <http://dbpedia.org/resource/SPARQL> } ;





  3. Click "Execute".
  4. As result the triples will be inserted:



  5. Check the count of the destination instance graph's triples by executing the following query like against the SPARQL endpoint, http://localhost:8891/sparql:

    SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o }

  6. Should be shown 60 as total.



Check again data on the Destination instances db2 and db3

  1. Start instances db2 and db3.
  2. To confirm that the triple count has increased by the number of inserted triples, execute the following on the Destination Virtuoso Instance db2 and db3 SPARQL Endpoint:

    SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o }

  3. Should be shown 60 as total:



Related