代码之家  ›  专栏  ›  技术社区  ›  Nick Cardoso

是否可以使Firebase实时数据库结构的一部分仅在本地

  •  1
  • Nick Cardoso  · 技术社区  · 7 年前

    App {
       "users" : {
            "user123" : {
                "name" : "Mr Guy"
                ...
                "groups" : {
                    "group567" : true,
                    "group890" : true
                }
            }
        }
        "groups" : {
            "group567" : {
                "name" : "My Group 1",
                "other" : "some other random stuff",
                "logs" : {
                     "guid345" : {
                         "author" : "Miss Other",
                         "note" : "some change note"
                     },
                     "guid817" : { ... },
                     "guid018" : { ... },
                     ...
                 },
                 "members" : {
                     "user123" : true,
                     ...    
                 }
            }
        }
    }
    

    class User {
        private String name;
        private List<Groups> groups;
    }
    
    class Group {
        private String name;
        private Other other;
        private List<Log> logs;
    }
    
    class Log {
        private String author;
        private String note;
    }
    

    我现在要优化下载的数据量。(每个组的“日志”节点对用户不重要,但用户处于活动状态时添加的项目除外—这意味着每个用户都将看到不同的日志列表。)

    我知道如何忽略logs字段而不将其发送到Firebase—我有一个实现,在sqlite中单独保存日志,而不是手动执行此操作 有没有办法将属性设置为保存在Firebase数据库的本地副本中,但不将该部分同步到远程数据库? 这样我就可以避免单独的数据存储

    2 回复  |  直到 7 年前
        1
  •  1
  •   Alex Mamo    7 年前

    Firebase实时数据库或新的cloudfirestore数据库的主要目标是实时工作,而不是作为离线数据库工作。即使您的应用程序暂时失去网络连接,Firebase应用程序也能正常工作。离线时缓存数据可用,恢复网络连接时Firebase会重新发送任何写入操作。

    启用磁盘持久性时,应用程序会将数据本地写入设备,以便应用程序在脱机时保持状态。可以使用以下代码行启用磁盘持久性:

    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    

    如果你想完全离开办公室,你可以使用FirebaseDatabase的 goOffline() 方法:

    但是,我不建议您将Firebase实时数据库用作仅脱机的数据库。它实际上被设计成一个在线数据库,可以在短时间到中断连接的中间阶段工作。如果你想使用一个离线数据库,你也可以使用@dougstevenson在他的回答中提到的 Room Library :

        2
  •  3
  •   Doug Stevenson    7 年前

    Firebase实时数据库没有“仅本地”数据的意义。一切尽可能地同步。

    如果您想要一个本地关系数据库,可以考虑 Android Jetpack's Room -它提供了你想要的东西。