是否可以在没有索引的情况下使用Realm Object Server实时同步



我正在研究实现的实时同步,如Realm的"任务"示例应用程序。

尤其是此块:

private func setupNotifications() -> NotificationToken {
    return parent.items.addNotificationBlock { [unowned self] changes in
        switch changes {
        case .Initial:
            // Results are now populated and can be accessed without blocking the UI
            self.viewController.didUpdateList(reload: true)
        case .Update(_, let deletions, let insertions, let modifications):
            // Query results have changed, so apply them to the UITableView
            self.viewController.tableView.beginUpdates()
            self.viewController.tableView.insertRowsAtIndexPaths(insertions.map { NSIndexPath(forRow: $0, inSection: 0) }, withRowAnimation: .Automatic)
            self.viewController.tableView.deleteRowsAtIndexPaths(deletions.map { NSIndexPath(forRow: $0, inSection: 0) }, withRowAnimation: .Automatic)
            self.viewController.tableView.reloadRowsAtIndexPaths(modifications.map { NSIndexPath(forRow: $0, inSection: 0) }, withRowAnimation: .None)
            self.viewController.tableView.endUpdates()
            self.viewController.didUpdateList(reload: false)
        case .Error(let error):
            // An error occurred while opening the Realm file on the background worker thread
            fatalError(String(error))
        }
    }
}

基本上使用索引传达更改。通过简单地使用这些索引访问底层模型/领域对象,接口已更新。

现在,我有一个与此不兼容的体系结构。我有一个专用的数据库层(其中该领域是一个实现),在该数据库层中,我将Realm对象加载到背景线程中,并将映射到普通的模型对象。这样,我将代码从数据库实现中解脱出来,并可以使用不变的模型。

在这种情况下,我不确定如何处理索引。看来我应该还记得原始查询,再做一次,然后访问我使用这些索引所需的条目?这听起来很低效率...

此外,我不知道这些索引如何与特定查询一起使用,例如"所有具有状态x的项目x" - 我收到的索引是否是指此特定查询?

推荐的方法是什么?

编辑:为了添加一些其他注释,我使用自定义服务器和Websocket实现了自己的同步功能,然后我使用语义键代替索引(有时我什至发送了完整的对象以避免必须查询数据库)。这样,我不得不处理基于索引的访问导致可能的不一致之处。想知道是否可能在某个时候进行类似的事情或与领域同步计划。

P.S。我打算切换到Realm Sync,因为我的自定义服务器的测试不佳,并且很难维护。我希望这是可能的。

所有领域查询返回结果,这是一种自动更新的容器类型,因此您无需再次进行查询。您可以为任何特定的Result设置通知处理程序,并在更改此集合以更新映射模型时通知。

相关内容

  • 没有找到相关文章

最新更新