我正在创建一个 iOS 应用程序,我打算仅向高级用户提供跨设备数据同步功能。我发现Realm Sync是一个很好的解决方案,可以保持本地设备上数据库和云 MongoDB Atlas 同步。但是,我不想将非高级用户的数据同步到云数据库。
我列出了几种我能想到的方法来防止非高级用户触发领域同步,但我不确定解决此问题的最佳方法是什么。
通过利用同步权限来防止同步- 我可以存储高级用户 ID 列表,并且只向这些用户授予同步权限。
{
"%%user.id": [
"5f4863e4d49bd2191ff1e623",
"5f48640dd49bd2191ff1e624",
"5f486417d49bd2191ff1e625"
]
}
Run Code Online (Sandbox Code Playgroud)
在客户端配置 Realm 对象,即如果用户是高级用户,则仅允许所有 Realm 对象/模型。
// Get a configuration to open the synced realm.
var configuration = user.configuration(partitionValue: "user=\(user.id)")
// For non-premium user it would be [User.self]
configuration.objectTypes = [User.self, Project.self]
Realm.asyncOpen(configuration: configuration) { [weak self](result) in /*...*/ }
Run Code Online (Sandbox Code Playgroud)
我正在寻找解决此问题的见解/推荐方法。
编辑
我还有一些关于以不同方式处理两种用例的其他问题 - 非高级用例仅打开本地Realm(),高级用例则使用Realm.asyncOpen().
Realm.asyncOpen()足够了还是需要做任何特殊处理?User为所有用户(高级+非高级)同步所有(集合中的自定义文档)记录。我的猜测是我应该为我的所有内容打开一个普通的领域,并仅使用[User.self]配置中的对象来同步领域。我对 MongoDB 还很陌生。我所处的场景是系统可以多次同时调用函数。
我浏览了mongoDB Atlas 函数文档,没有找到任何涉及可扩展性或并发问题的内容。
单个函数可以并行调用多次吗?例如:三个不同的请求试图调用同一函数,这三个请求将被一一处理或并行处理。
我正在使用 SWIFTUI、RealmSwift 和 Xcode 12.4 开发一个应用程序 随着开发,Realm 数据模型发生变化,例如。有些值被删除,有些值被添加......
当我对数据模型进行更改时,我只需删除设备上的应用程序并重新安装它,以避免因领域迁移问题而导致崩溃。现在的问题是,Xcode Preview 由于同样的迁移问题而崩溃,我不知道如何为 Xcode Preview 进行全新的重新构建。
下面是 Xcode 给我的 DiagnosticReports。
由于以下错误,需要迁移:
- 属性“A”已被删除。
- 已添加属性“B”。
领域迁移用于预览?这没有道理!
我尝试清理构建、删除派生数据、重新启动......但没有运气。应该有某种方法来处理预览提供程序的领域模型更改。
请有人指导我该怎么做才能恢复我的预览。