%META:TOPICPARENT{name="VirtGraphReplication"}% ---+ Replication Example: 2-node Bi-directional Topology %TOC% ---++ Introduction The following Guide demonstrates the Virtuoso RDF Bi-directional Graph Replication, e.g., %BR%%BR%%BR%%BR% ---++Prerequisites ---+++Database INI Parameters Suppose there are 2 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 ... ---+++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 db1 and db2 with names db1 and db2 respectively. ---+++Install Conductor package On each of the 2 Virtuoso instances install the [[https://virtuoso.openlinksw.com/download/][conductor_dav.vad]] package. ---++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 You will be shown the publication items page %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 db1 to db2's Publication 1 Log in at http://localhost:8891/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" 1 As result db2 will be shown in the "Connected Data Sources" list. %BR%%BR%%BR%%BR% 1 Select db2 the "Connected Data Sources" list 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% ---++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 You will be shown the publication items page %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" %BR%%BR%%BR%%BR% 1 As result db1 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 db2 Virtuoso Instance 1. Log in at http://localhost:8892/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 A successful upload will result in a shown message. %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:8892/sparql: SELECT COUNT(*) FROM WHERE { ?s ?p ?o } %BR%%BR%%BR%%BR% 1 Should return 57 as total. %BR%%BR%%BR%%BR% ---++Check data on the Destination instance db1 1 To check the starting count, execute from db1's SPARQL Endpoint: SELECT COUNT(*) FROM WHERE { ?s ?p ?o } 1 Should return 57 as total. %BR%%BR%%BR%%BR% ---++Add new data on db2 1 Disconnect db1. 1 On the Host Virtuoso Instance db2 go to Conductor -> Database -> Interactive SQL enter the following statement: 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:8892/sparql: SELECT COUNT(*) FROM WHERE { ?s ?p ?o } 1 Should return 58 as total. %BR%%BR%%BR%%BR% ---++Check data on the Destination instance db1 1 Start instance db1 1 To confirm that the triple count has increased by the number of inserted triples, execute the following statement on db1's SPARQL Endpoint: SELECT COUNT(*) FROM WHERE { ?s ?p ?o } 1 Should return 58 as total. %BR%%BR%%BR%%BR% ---++Add new data on db1 1 Disconnect db2. 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 { } ; %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 return 60 as total. %BR%%BR%%BR%%BR% ---++Check data on the Destination instance db2 1 Start instance db2 1 To confirm that the triple count has increased by the number of inserted triples, execute the following statement on db2's SPARQL Endpoint: SELECT COUNT(*) FROM WHERE { ?s ?p ?o } 1 Should return 60 as total. %BR%%BR%%BR%%BR% ---++Related * [[VirtGraphReplicationStar][Replication Example: Star Topology]] * [[VirtGraphReplicationChain][Replication Example: Chain 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]]