%META:TOPICPARENT{name="VirtGraphReplication"}%
---+ Replication Example: Chain Topology
%TOC%
---++ Introduction
The following How-To walks you through setting up Virtuoso RDF Graph Replication in a Chain Topology.
%BR%%BR%%BR%%BR%
---++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
...
1. 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
...
1. 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 [[https://virtuoso.openlinksw.com/download/][conductor_dav.vad]] package.
---++Create Publication on db1
1. Go to http://localhost:8891/conductor and log in as dba
1. Go to Conductor -> Replication -> Transactional -> Publications
%BR%%BR%%BR%%BR%
1. Click Enable RDF Publishing
1 As result publication with the name RDF Publication should be created
%BR%%BR%%BR%%BR%
1 Click the link which is the publication name.
1 The publication items page will be shown:
%BR%%BR%%BR%%BR%
1 Enter for Graph IRI:
http://example.org
%BR%%BR%%BR%%BR%
1 Click Add New
1 The item will be created and shown in the list of items for the currently viewed publication.
%BR%%BR%%BR%%BR%
---++Create subscription from db2 to db1's Publication
1 Log in at http://localhost:8892/conductor.
1 Go to Replication -> Transactional -> Subscriptions:
%BR%%BR%%BR%%BR%
1 Click New Subscription:
%BR%%BR%%BR%%BR%
1 From the list of "Specify new data source" select Data Source db1:
%BR%%BR%%BR%%BR%
1 Enter for db1 dba user credentials:
%BR%%BR%%BR%%BR%
1 Click "Add Data Source":
1 As result db1 will be shown in the "Connected Data Sources" list.
%BR%%BR%%BR%%BR%
1 Click "Publications list":
%BR%%BR%%BR%%BR%
1 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".
%BR%%BR%%BR%%BR%
1 As result will be shown the "Confirm subscription" page.
%BR%%BR%%BR%%BR%
1 The sync interval by default is 10 minutes. For the testing purposes, we will change it to 1 minute.
%BR%%BR%%BR%%BR%
1 Click "Subscribe".
1 The subscription will be created.
%BR%%BR%%BR%%BR%
---++Create Publication on db2
1. Go to http://localhost:8892/conductor and log in as dba,
1. Go to Conductor -> Replication -> Transactional -> Publications:
%BR%%BR%%BR%%BR%
1. Click Enable RDF Publishing:
1 As result publication with the name RDF Publication should be created:
%BR%%BR%%BR%%BR%
1 Click the link which is the publication name.
1 The publication items page will be shown:
%BR%%BR%%BR%%BR%
1 Enter for Graph IRI:
http://example.org
%BR%%BR%%BR%%BR%
1 Click Add New.
1 The item will be created and shown in the list of items for the currently viewed publication.
%BR%%BR%%BR%%BR%
---++Create subscription from db3 to db2's Publication
1 Log in at http://localhost:8893/conductor.
1 Go to Replication -> Transactional -> Subscriptions:
%BR%%BR%%BR%%BR%
1 Click New Subscription:
%BR%%BR%%BR%%BR%
1 From the list of "Specify new data source" select Data Source db2:
%BR%%BR%%BR%%BR%
1 Enter for db2 dba user credentials:
%BR%%BR%%BR%%BR%
1 Click "Add Data Source":
%BR%%BR%%BR%%BR%
1 As result db2 will be shown in the "Connected Data Sources" list. Select it and click "Publications list":
%BR%%BR%%BR%%BR%
1 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".
%BR%%BR%%BR%%BR%
1 As result will be shown the "Confirm subscription" page.
%BR%%BR%%BR%%BR%
1 The sync interval by default is 10 minutes. For the testing purposes, we will change it to 1 minute.
%BR%%BR%%BR%%BR%
1 Click "Subscribe".
1 The subscription will be created.
%BR%%BR%%BR%%BR%
---++Insert Data into a Named Graph on the db1 Virtuoso Instance
1. Log in at http://localhost:8891/conductor.
1 Go to Linked Data-> Quad Store Upload:
%BR%%BR%%BR%%BR%
1 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
1 Enter for Named Graph IRI:
http://example.org
%BR%%BR%%BR%%BR%
1 Click Upload.
1 Should be shown message for successful upload:
%BR%%BR%%BR%%BR%
1 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
WHERE { ?s ?p ?o }
%BR%%BR%%BR%%BR%
1 Should be shown 57 as total.
%BR%%BR%%BR%%BR%
---++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
WHERE { ?s ?p ?o }
1 Should return 57 as total.
%BR%%BR%%BR%%BR%
---++Add new data on db1
1 Disconnect db2 and db3.
1 On the Host Virtuoso Instance db1 go to Conductor -> Database -> Interactive SQL enter the following statement:
SPARQL INSERT INTO GRAPH
{
} ;
SPARQL INSERT INTO GRAPH
{
} ;
SPARQL INSERT INTO GRAPH
{
} ;
%BR%%BR%%BR%%BR%
1 Click "Execute".
1 As result the triples will be inserted:
%BR%%BR%%BR%%BR%
1 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
WHERE { ?s ?p ?o }
1 Should be shown 60 as total.
%BR%%BR%%BR%%BR%
---++Check again data on the Destination instances db2 and db3
1 Start instances db2 and db3.
1 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
WHERE { ?s ?p ?o }
1 Should be shown 60 as total:
%BR%%BR%%BR%%BR%
---++Related
* [[VirtGraphReplicationStar][Replication Example: Star Topology]]
* [[VirtGraphReplicationBiDirectional][Replication Example: 2-node Bi-directional Topology]]
* [[VirtGraphReplicationPSQL][Set up RDF Replication via procedure calls]]
* [[http://ods.openlinksw.com/wiki/ODS/VirtPubSubHub][Example of Linked Data Usage of PubSubHubbub Implementation]]
* [[VirtRdfReplScenarios][Exploit Virtuoso's Replication Functionality Web based Solutions]]