我正在使用RDF文件存储由不同用户添加的有关各种主题的在线资源的链接(URL)。
我正在使用Jena API在Apache服务器上读取和写入RDF文件。
我担心的是,多个用户同时允许登录系统并可能同时与该文件进行交互。
我想知道这是否会导致更新文件时出现任何问题,例如,它是否会以某种方式损坏文件。我是否可以将其用于实时应用程序,或者由于多个用户同时访问RDF文件以进行读写而导致应用程序崩溃。
我真的很感激帮助。
由于
赛
//updated code to understand answer.
// Example of Locks for reading
File f = new File(fileName);
InputStream in = new FileInputStream(f);
Model model = ModelFactory.createDefaultModel();
model.read(in,null);
String queryString = "...";
model.enterCriticalSection(Lock.READ); // use of lock
try {
qe = QueryExecutionFactory.create(qry, model);
rs = qe.execSelect();
for ( ; rs.hasNext() ; )
{
//read literals
//read literals
out.println(....);
}
qe.close();
} finally
{
model.leaveCriticalSection() ;
}
//******************************
// Example of Locks for WRITING
File fout = new File(fileName);
Model model = ModelFactory.createDefaultModel();
model.read(in,null);
OutputStream os = new FileOutputStream(fout);
// model updation
// new triplets. new data being added
model.enterCriticalSection(Lock.WRITE); // use of lock
try {
model.write(os);
} finally
{
model.leaveCriticalSection() ;
}
os.close();
答案 0 :(得分:2)
查看耶拿网站的Concurrency HowTo。关注TDB / SDB交易的相关链接。根据文件:
锁为管理交互提供关键部分支持 同一JVM中的多个线程。耶拿提供 多读者/单作者并发支持(MRSW)。
模式一般是:
Model model = . . . ; model.enterCriticalSection(Lock.READ) ; // or Lock.WRITE try { ... perform actions on the model ... ... obey contract - no update operations if a read lock } finally { model.leaveCriticalSection() ; }
答案 1 :(得分:2)
文件存储不提供正确的交易。
选择是:
DatasetGraphWithLock
- 提供基于锁定的交易模拟(不完美 - 无法中止)。如果您锁定,请记住编写文件不是原子的。写作过程中的崩溃会使半个文件落后。写入一个文件,然后将其重命名为同一目录中的最终名称。