如何在Firebase中搜索这个非常大的用户列表

时间:2016-11-18 14:28:41

标签: firebase firebase-realtime-database nosql

我尝试在Firebase中创建一个世界模型的人。这意味着我需要放置500 miljon +记录,就像这个Firebase json:

      "USER" : {
        "HnhLyXRxUINmlltKOfxx2QBYiQ53" : {  // FireBase user ids
          "FRIENDLYS" : {
            "-KWrFrMx1yQe0jhyA7HP" : { // Push ids
              "animal" : "dog"
            },
            "-KWrG7EsLkZvASjpcW3A" : {
              "animal" : "cat"
            },
            "-KWrG9hbQxrZwdfjqbuQ" : {
              "animal" : "horse"
            }
          },
          "email" : "someemail@gmail.com",
          "lastName" : "Doe",
          "firstName" : "John",
          "googleId" : "10086464927329323e2326"
        },
         "HnhLyXHKJH67677GJKMnbBYiQ53" : {  // FireBase user ids
           "FRIENDLYS" : {
            "-KWrFrMdjnjs982s7HP" : { // Push ids
              "animal" : "ant"
            ....

        }

我想像这样搜索一个USER

firebase.child("USER/HnhLyXRxUINmlltKOfxx2QBYiQ53").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

问题是这是否是一种继续发展的好方法,尤其是拥有一个"用户"像我一样搜索这个大对象?

我能期待什么?

1 个答案:

答案 0 :(得分:2)

您的代码不是正在搜索的用户。您正在构建对子节点的直接引用,该操作本身没有任何性能影响。直接查找密钥总是很快,因此用户数量不会对您的应用程序产生负面影响。

但是,在用户下存储“FRIENDLYS”[sic]不会缩放。加载单个用户节点会使每个额外的子项放在那里变慢。您应该将它们分别存储在不同的根节点下,并且只有在您真正需要它们时才加载它们。

另请参阅实时数据库指南的Structure Your Data部分。