代码之家  ›  专栏  ›  技术社区  ›  John Gallagher

有没有办法在进程之间共享核心数据存储?

  •  6
  • John Gallagher  · 技术社区  · 15 年前

    我想做什么?

    1. 从磁盘上的核心数据存储中读取数据的UI进程。它不需要编辑数据,只需读取和显示数据。

    2. 一种命令行进程,它写入用户界面访问的同一数据存储。

    为什么?

    因此,命令行进程可以一直运行,但用户可以退出UI进程,忘记应用程序,直到他们需要查看捕获的数据。

    实现这一点最简单、最可靠的方法是什么?

    我试过什么了?

    我之前读过关于在线程之间共享数据存储的内容,并实现过一次,但在文档或web上找不到任何说明如何在进程之间共享存储的内容。

    它是否像将两个进程指向同一个数据存储文件一样简单?我已经做了简短的实验。它似乎工作正常,但我担心当它真的处于压力之下时,我可能会遇到锁定等问题。

    最后

    我真的很感激有人能给我指点该怎么做。谢谢

    4 回复  |  直到 15 年前
        1
  •  2
  •   Williham Totland    15 年前

    这可能是其中一种情况,在这种情况下,你只需要尝试一下,然后看看。

    就我所记得的,SQLite(这是您最可能想要使用的数据存储)内置了文件锁定等机制;因此,文件的完整性很可能得到保证。另一方面,如果使用CoreData/XML方法,可能会遇到问题。

    换句话说;对文件使用SQLite备份,您可能会没事。

        2
  •  2
  •   Louis Gerbarg    15 年前

    你可以做你想做的事情,你可能想使用SQLite存储,否则每次你想同步数据时保存和提交都会非常慢。你只需要在应用程序之间使用某种IPC门铃,这样你就可以通知一个应用程序它需要重新检查磁盘上的持久存储并合并其数据。

    Apple文档中使用多个持久存储CorinData作为有效选项 Multi-Threading with Core Data (在“一般指南”中,打开2)。这恰好是在同一个过程中讨论完全并行的CD堆栈,但如果它们也在完全独立的地址空间中,这是有效的。

        3
  •  2
  •   John Gallagher    13 年前

    近两年过去了,我刚刚找到了一种更好的方法。

    答案似乎在于同步服务。我甚至都没意识到它的存在!关于这一点,有一个很好的帖子:

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

    我还没有在我的应用程序中尝试过这一点,但这似乎是在两个进程或应用程序之间共享核心数据存储的绝佳方式。

    如果我遇到任何性能问题,我会相应地更新这个答案,但这似乎是苹果推荐的方法。

        4
  •  1
  •   NSResponder    15 年前

    你需要重新思考你的架构。如果你想让守护进程拥有数据存储,那么让你的GUI应用程序连接到守护进程。试图共享数据存储是一堆你不想打开的蠕虫。