3 Replies Latest reply on Jul 29, 2008 2:58 PM by Mannamal-Oracle

    How to create a transactional ontology store?

      I have some OWL Schemas and OWL Data documents which are loaded into a RDF Model in Oracle 10gR2. I also created some Rule Indexes on top of this model. I need to update or load new data into the existing model. This update/loading should be done on a daily basis. I am expecting half a million new triples to be added everyday. So, how should I check if :

      a) rule indexes have become invalid
      b) duplicate triples are not loaded
      c) loading is done without any downtime to the applications using this model
      d) a fast approach for loading this data.

      I am using the following code to load the ontology.

      GraphOracleSem graph = new GraphOracleSem(oracle, "MODELNAME" );
      OntModel ont = createOntologyModel("D:\\\xyz.owl");
      Graph g = ont.getGraph();

      Here xyz.owl is in RDF/XML format and contains around 100,000 triples, It is taking more than 20 minutes to load it into a model. I need a faster way of loading.

        • 1. Re: How to create a transactional ontology store?
          Hi Rajesh,

          When new triples are added the rules index becomes 'incomplete' and when triples are deleted it becomes 'invalid. The status of a rules index can be checked using RDF_RULES_INDEX_INFO view (see chapter 1 in the documentation).

          Duplicate triples are not stored.

          Oracle 11g has support for very fast loading. Some load performance figures are at the Oracle Semantic Technologies page at http://www.oracle.com/technology/tech/semantic_technologies/index.html We strongly recommend moving to Oracle 11g if you are interested in fast loading. For Oracle 10gR2 it should be faster than the numbers you mention (One million into an empty network takes about 30 minutes on a commodity PC). If you feel there are tuning issues, please file a service request with Oracle Support.

          • 2. Re: How to create a transactional ontology store?
            I have a query related to this.
            While updating a model, can some other application concurrently use it? I mean, I want my program to access the triples stored in the model while some other program is adding triples to the same model.

            • 3. Re: How to create a transactional ontology store?
              Yes, concurrency works exactly as it does for other database objects. When the update mechanism uses an internal lock the querying application might have to wait, but all of this will be transparent to the application.

              The same thing goes for loading (question in the first post on this thread) - loading and querying applications can run concurrently (as with any database object), during load steps when a lock is obtained the querying application will wait.