Я использую RDF-файл для хранения ссылок (URL-адресов) онлайн-ресурсов, которые разные пользователи добавляют по различным темам.несколько пользователей, обращающихся к файлу RDF для чтения и записи
Я использую Jena API для чтения и записи RDF-файла на сервере Apache.
Меня беспокоит то, что несколько пользователей могут одновременно входить в систему и могут одновременно взаимодействовать с файлом.
Мне интересно, может ли это вызвать какие-либо проблемы при обновлении файла, например, он каким-то образом повредит файл. Могу ли я продолжить это для живого приложения или это приведет к сбою моего приложения в результате доступа к 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();
Большое спасибо за ответ. Я обновил вопрос с примера из моего кода для блокировок чтения и записи. Как вы думаете, я правильно понял понятие замков, и я могу сделать то же самое в своем коде, и это должно решить мою проблему. Я понимаю, что я могу использовать эти блокировки с файлами, и я должен прочитать блокировку кода, где я выполняю SPARQL и итерацию результатов. Я могу использовать блокировку записи, где я буду писать модель после обновления. Большое спасибо. – SotonJ
это примерно правый. вы, возможно, захотите предоставить TDB/SDB, хотя они предлагают полную поддержку транзакций ACID. хранилище файлов, как в вашем примере, вероятно, полезно только для прототипирования/тестирования afaic. – chris