Per graph ICV rules - with minimal overhead


In our system we have two types of data. User data and content data. We use ICV to restrict our user data, our most important rule is that :username is an owl key for :User.

Our content data makes up 99.9% of our database. We don’t use any ICV rules to restrict our content data. However every write to the database, regardless of to the content data graph or the user data graph (which has ICV), will trigger every ICV rule to run.

On simple benchmarks on my laptop the difference between using ICV or not amounts to a 5x difference in write throughput. This after optimizing all our ICV rules.

What would be great would be if I could assign the ICV rules to graphs, so that they only ran when those graphs were modified.

Better yet if Stardog would calculate which rules needed to run based on the query (or changed triples).


Have you given putting your user and content data into two separate databases and using service queries? If it’s in the same Stardog instance it should avoid a network roundtrip but the performance will depend on your queries and your data but it might be worth a try.