java - Firebase 实时数据库 : Howto index properly on key-value pair

标签 java android json firebase firebase-realtime-database

问题

我有这个 Firebase 实时数据库:

{      
  "groupUsers" : {
    "group1key" : {
      "user1key" : "admin"
    },
    "group2key" : {
      "user1key" : "admin",
      "user2key" : "readonly",
      "user3key" : "readwrite"
    }
  }
}

在我的 Android 应用程序中,我像这样查询

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("groupUsers");
ref.orderByChild(auth.getCurrentUser().getUid()).startAt("").addValueEventListener() {...}

这会产生警告:

Using an unspecified index. Consider adding ".indexOn" ... to your security and Firebase Database rules for better performance

如何正确索引?当数据增长时,我担心我的应用程序对未索引数据的查询会变得非常慢。

背景

我已经尝试在我的规则文件中对值进行索引:

".indexOn": ".value"

但只有当数据是标量但它们是键值对("user1key": "admin")时,这才有效。

我不能像这样在规则文件中添加索引:

".indexOn": ["user"]

因为这需要一个像这样的常量属性名称:

{ "groupUsers" : {
    "group1key" : {
      "name" : "user1"
    }        
  }
}

但是我有像名称这样的值

"user1key" : "admin",
"user2key" : "readonly",
"user3key" : "readwrite"

最佳答案

无法为这种结构预先创建索引。我在我的答案 here 中介绍了这种类型的结构和 here新的 Firestore 文档(在这方面的工作原理类似)甚至有一个 documentation page about it .

建议以允许在另一个方向进行查找的方式存储数据。使用当前的结构,您可以有效地查找组中的用户。要还允许查找用户的组,请添加以下结构:

{      
  "usersGroups" : {
    "user1key" : {
      "group1key" : "admin",
      "group2key" : "admin"
    },
    "user2key" : {
      "group2key" : "readonly",
    },
    "user3key" : {
      "group2key" : "readwrite"
    }
  }
}

关于java - Firebase 实时数据库 : Howto index properly on key-value pair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283040/

相关文章:

android - 在 onOptionsItemSelected 之外获取菜单

html - 除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间是否有任何区别?

jquery - Node.js 中未定义 JSONP,使用 .send 会导致意外的 token 错误

使用 close() 关闭后 Java Clip(声音/音频)内存泄漏

java - 可以使用 8.4 和 9.0 postgres( hibernate )库构建一个 .war 文件吗?

java - 如何在 Java 中匹配一串元组?

android - 在 Android MP3 服务 MediaPlayer 中更改 URL

android - 嵌套坐标布局和fitsSystemWindows重叠状态栏

java - 使用 java/javafx 更改 Linux 中的 Activity/应用程序菜单栏

c# - 将对象从大型 JSON 文件转换为 .NET 中对象的最快方法