Есть ли способ обмена хранилищем базовых данных между процессами?

Что я пытаюсь сделать?

  1. Процесс пользовательского интерфейса, который читает данные из основного хранилища данных на диске. Не нужно редактировать данные, просто читать и отображать данные.

  2. Процесс командной строки, который записывает данные в то же хранилище данных, к которому обращается пользовательский интерфейс.

Зачем?

Таким образом, процесс командной строки может выполняться все время, но пользователь может выйти из процесса пользовательского интерфейса и забыть о приложении до тех пор, пока ему не понадобится просмотреть захваченные данные.

Каков был бы самый простой и надежный способ достижения этого?

Что я пробовал?

Я прочитал о совместном использовании хранилища данных между потоками и реализовал это однажды, но я не могу найти ничего в документах или в Интернете, указывающих, как разделить хранилище между процессами.

Это так же просто, как указывать оба процесса на один и тот же файл хранилища данных? Я экспериментировал с этим кратко. Казалось, что все работает хорошо, но я боюсь, что у меня могут возникнуть проблемы с блокировкой и т. Д., Когда это действительно вызывает стресс.

в заключение

Я был бы очень признателен, если бы кто-то дал мне указания о том, в каком направлении двигаться дальше Благодарю.

4 ответа

Это может быть одна из тех ситуаций, когда вам просто нужно попробовать и посмотреть ™.

Насколько я помню, в SQLite (хранилище данных, которое вы, скорее всего, захотите использовать) встроены механизмы блокировки файлов и т. Д.; таким образом, целостность файла, вероятно, будет гарантирована. Если, с другой стороны, вы используете подход CoreData/XML, вы можете столкнуться с проблемами.

Другими словами; используйте поддержку SQLite для своего файла, и у вас, вероятно, все будет хорошо.

Вы можете делать именно то, что вы хотите, вы, вероятно, хотите использовать хранилище SQLite, иначе сохранение и фиксация каждый раз, когда вы хотите синхронизировать данные, будут ужасно медленными. Вам просто нужно использовать своего рода дверной звонок IPC между приложениями, чтобы вы могли сообщить одному приложению, в котором оно нуждается, перепроверить постоянное хранилище на диске и объединить его данные.

Apple документирует использование нескольких постоянных кориндоров хранилища в качестве допустимого параметра в многопоточности с базовыми данными (в "Общих правилах", откройте 2). Это происходит при обсуждении полностью параллельных стеков CD в одном и том же процессе, но это справедливо, если они также находятся в совершенно разных адресных пространствах.

Прошло почти два года, и я нашел гораздо лучший способ сделать это.

Ответ, кажется, лежит на Sync Services. Я даже не осознавал, что это существует! Об этом есть отличный пост:

http://www.timisted.net/blog/archive/core-data-and-sync-services/

Я еще не пробовал это с моим приложением, но кажется, что это отличный способ поделиться основным хранилищем данных между двумя процессами или приложениями.

Если у меня возникнут какие-либо проблемы с производительностью, я соответствующим образом обновлю этот ответ, но похоже, что Apple рекомендует этот способ.

Вы должны переосмыслить свою архитектуру. Если вы хотите, чтобы демон владел хранилищем данных, подключите приложение GUI к демону. Попытка поделиться хранилищем данных - это червь, который вы не хотите открывать.

Другие вопросы по тегам