【问题标题】:Having two realm database in a project and merging it在一个项目中有两个领域数据库并将其合并
【发布时间】:2017-03-25 14:28:02
【问题描述】:

我的应用有两种类型的用户,付费用户和免费用户。 对于免费用户,我不提供他们在我的应用程序中创建的数据的任何备份。所以这个领域数据库实例(比如 db1)没有同步。 对于付费用户,我正在证明备份,这里我使用的是同步领域 db(比如 db2)。

这里的条件是用户更愿意成为付费用户。如何同步之前离线领域数据库中可用的数据?如何将此 db1 合并到 db2 中?

另外,我正在 Db 中编写大量数据(视频和图像)。我更喜欢异步写作和阅读。 我尝试了 writeAsync 方法,它给出了异常。对此的任何提示将不胜感激。

下面的代码抛出说领域是从错误的线程访问的。

public async Task InsertItemInDB(Post model)
        {
            try
            {
                //realm.Write(() =>
                //   {

                //     realm.Add(model);

                //   });
                var realm = Realm.GetInstance(Config);
                await realm.WriteAsync( (Realm obj) => {


                    realm.Add(model, true);
                });
            }
            catch(Exception ex){

                Console.WriteLine("problem writing to DB" + ex);
            }
        }

【问题讨论】:

  • 1) 您可以使用 Json 从每个 Realm db 导出/导入,您不能同时打开两个数据库... 2) writing a big chuck of data... 注意 16MB每个字节数组的限制,我个人完全避免在 Realm 中存储二进制资产,因为内存需求成为一个大问题,尤其是在 iOS 上,就你得到的 Exception 而言,我们可能需要抛出异常的代码和实际的例外。
  • 是的,由于 16 Mb 的限制,我不得不将视频长度限制为 7 秒。我的客户确信媒体会出现在 Db 中,我无法用其他方式说服他。他想要备份所有数据,你有建议吗?
  • 您可以使用 Realm's Mobile Platform 来同步用户数据库...简单且预构建的选项。否则,您将不得不以某种方式序列化数据并将其上传到您的服务器并通过某种类型的用户 ID 将其存储在那里,并添加在数据库中下载恢复它的能力.....
  • 但我仍然不能拥有大于 16 Mb 的视频,对吗?
  • 在对整个项目了解有限的情况下很难推荐一个解决方案,但是原型设计和使用严格的 MVVM/VIPER 架构,因此您可以选择替换不同的存储容器和/或拆分您的对象存储和基于文件的缓存之间的数据模型,并为您的用户数据提供不同的同步方法,如果我正在研究它,这将是一个起点......

标签: ios xamarin realm


【解决方案1】:

当你启动一个WriteAsync 块时,你必须使用传递给lamb 块的Realm 实例,否则你会得到一个无效线程异常。

你的代码应该是:

await realm.WriteAsync( (Realm obj) => {
    // Use the Realm instance that was passed in, i.e. `Realm obj`
    obj.Add(model, true);
});

【讨论】:

  • 你能告诉我,obj.Add(model,true) & obj.Add(model,false) 之间的区别,同时我正在尝试这个
  • 对于指定了[PrimaryKey]的对象,可以在realm中传入update: true。添加添加传入的对象或更新现有的对象:realm.io/docs/xamarin/latest/#updating-objects
  • 第一次添加时应该是假的!好的
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 2018-06-23
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多