Transcript Virtuoso

Michael Povolotsky
CMSC491s/691s
What is Virtuoso?
 Virtuoso, known as Virtuoso Universal Server, is a
multi-protocol RDBMS
 Includes an object-relational database engine (for sql,
xml, rdf, and free-text), includes JAVA and .NET
runtime hosting, Web Application Server, Web
Services, Web Content Management, DataPortability (
controlling, sharing, and moving data freely from
system to system)
 Instead of separate servers for RDBMS, ORDBMS,
RDF, XML, Web Application Server, and File Server
functionality, Virtuoso combines the aforementioned
into a single “universal server”
 Virtuoso is designed with multi-threading and multi-
CPU support
Quads
 Implements a quad (graph, subject, predicate, object)
 Default Layout
-
GSPO is used as the primary key
OPGS is used as a bitmap index
 GPS are IRI ids (Internalized Resource Identifier) , O is any
SQL serializable object
 Uses bitmap indices for efficient storage capacity
Quads
 In Virtuoso, an RDF mapping schema consists of
declarations of one or more quad storages.[1]
 The default quad storage declares that the system table
RDF QUAD consists of four columns (G, S, P and O)
that contain fields of stored triples, using special
formats that are suitable for arbitrary RDF nodes and
literals.[1]
Quads
 “A quad map value describes how to compose one of
four fields of an RDF quad. It may be an RDF literal
constant, an IRI constant or an IRI class with a list of
columns of table aliases where SQL values come from.
Four quad map values (for G, S, P and O) form quad
map pattern that specify how the column values of
table aliases are combined into an RDF quad.”[1]
Data Manipulation
 Virtuoso includes support for SPARUL SPARQL and is
compatibility with Jena
 Updates can be run transactionally or with an
automatic commit after each modified triple[1]
SPARQL & SQL
 SPARQL is translated into SQL when the query is
parsed.
 All triples are stored in one table
RDF Inferencing
 Includes an integrated capability directly in the
Virtuoso SQL execution engine to inference subclasses
and sub properties.
 Asking for the class of an IRI also return any super
classes. This behavior is equivalent to having all of the
implied classes stored directly in the database.[1]
Benchmarks
 Virtuoso can store over 1 billion triples
 Loads 1 billion triples LUBM benchmark at a sustained
rate of 12692 triples/s and 47 million triples Wikipedia
data set at a sustained rate of 20800 triples/s (Orri
Erling, OpenLink) [4]
Applications
 Dbpedia
 Musicbrainz
 Geonames
 PingTheSemanticWeb
Features
http://virtuoso.openlinksw.com/main/featurematrix/i
ndex.htm
Protocols Implemented
API’s Implemented
 HTTP, HTTPS, WebDAV,
 ODBC, JDBC, OLE DB,
SOAP, UDDI, WSDL, WSPolicy, WS-Security, WSReliableMessaging, WSRouting, WS-Referral, WSAttachment, WS-BPEL,
SyncML, GData, SPARQL,
SPARUL, NNTP
ADO.NET, ADO.NET Entity
Framework, XMLA
Query Language Support
Schema Definition Lanuage
 SQL
 SQL’s DDL (Data Definition
 SPARQL
Language)
 XQuery
 XPath
 XSLT
 XML Schema
Content Syndication and Interchange Format
Support
 Atom
 RSS 2.0/1.0
 OPML
 XBEL
 FOAF
 SIOC
Cross-Platform Support
 Virtuoso is supported on large number of platforms,
both 32-bit and 64-bit
- Windows
- UNIX (HP, AIX, Sun, DEC, BSD, SCO)
- Linux (Red Hat, SUSE)
- Mac OS X
Licensing
 In 2006 Virtuoso was available as open source
 Today, Virtuoso is available in both open source and
commercial licenses
 The open-source version of Virtuoso is known as
OpenLink Virtuoso
Subsequent Work
 Clustering: increasing the storage of triples from the
billions to hundreds of billions and upwards[1]
 Updating Relational Data by SPARUL statements:
extending SPARUL compiler and run-time in order to
make RDF views updatable[1]
 Cloud Computing: for huge triple storage sets that
current data centers may not be able to handle
Bibliography
[1] Erling O., Mikhailov I.: RDF Support in the Virtuoso
DBMS
[2] Erling O.: Towards Web Scale RDF
[3] http://en.wikipedia.org/wiki/Virtuoso_Universal_Server
[4] http://virtuoso.openlinksw.com/wiki/main/Main/VOSBitmapIndexing