%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]]