我很好奇使用此代码搜索集合中的文档的效率.随着集合中文档数量的增加以及数组中项目数量的增长,这种搜索效率会非常低下吗?有没有更好的方法来实现这一点,或者我是否可以对数据库进行架构更改以更好地优化这一点?有什么地方我可以找到firestore文档的这些函数的时间复杂性吗?

Query query = db.collection("groups").whereArrayContains("members", userid);

替代解决方案

我最初想尝试在用户下存储组ID,以便只抓取当前用户的组,但遇到了问题,从未找到使用多个ID查询来设置FireStoreRecyclerOptions的解决方案.

例:

for(String groupid : list) {

Query query = db.collection("test-groups").document(groupid);

FirestoreRecyclerOptions response = new FirestoreRecyclerOptions.Builder()

.setQuery(query, GroupResponse.class)

.build();

}

有没有办法向FirestoreRecyclerOptions添加多个查询?

解决方法:

As the number of documents in the collection grows and the number of items in the array grows will this search become very inefficient?

问题不在于搜索将变得非常低效,问题在于文档有限制.因此,当涉及到可以将多少数据放入文档时,存在一些限制.根据有关usage and limits的官方文档:

Maximum size for a document: 1 MiB (1,048,576 bytes)

如您所见,单个文档中的数据总量限制为1 MiB.当我们谈论存储文本时,你可以存储很多但是当你的阵列变大时,要小心这个限制.

如果要在数组中存储大量数据,并且这些数组应该由许多用户更新,那么还有另一个需要注意的限制.因此,每个文档每秒限制为1次写入.因此,如果您遇到许多用户都试图同时将数据写入/更新到同一文档的情况,您可能会开始看到其中一些写入失败.所以,也要小心这个限制.

您可能已经注意到,Cloud Firestore中的查询速度非常快,这是因为Firestore会自动为文档中的任何字段创建索引.

如果您认为您将根据其包含特定的集合成员来查询父级,则使用映射而不是数组.

有很多帖子说数组在Cloud Firestore上运行不正常,因为当你有多个客户端可以修改的数据时,很容易混淆,因为你无法知道发生了什么以及在哪个字段上.如果我正在使用地图并且用户想要编辑几个不同的字段,即使是完全相同的字段,我们通常也知道发生了什么.在数组中,事情是不同的.尝试思考如果用户想要在索引0处编辑值,可能会发生什么,某些其他用户想要删除索引0处的值,您最终会得到非常不同的结果,为什么不这样,数组超出范围异常.因此,使用数组的Firestore操作有点不同.因此,您无法在特定索引处执行插入,更新或删除等操作.但是如果不关心将元素存储到数组中的确切顺序,那么您应该使用数组. Firestore几天前添加了一些功能来添加或删除特定元素,但前提是不关心它们的确切位置.见here官方文档.

作为结论,只有在需要将数据显示在一起时才将数据放在同一文档中.也不要让它们如此之大,因此您需要下载实际需要的更多数据.因此,当您要搜索该数据的个别字段或者您希望数据有增长空间时,请将数据放入集合中.如果要根据该数据搜索父对象,请将数据保留为映射字段.如果您有通常将它们用作标记的项目,请继续使用数组.

也不要担心Firestore中的slow query.

标签:java,android,firebase,google-cloud-firestore,firebaseui

来源: https://codeday.me/bug/20190622/1261808.html

java contains性能_java – 使用whereArrayContains进行搜索的效率相关推荐

  1. java 多线程性能_Java中多线程的性能比较

    java 多线程性能 Java中有多种用于多线程的技术. 可以通过同步关键字,锁或原子变量来并行化Java中的一段代码. 这篇文章将比较使用synced关键字ReentrantLock,getAndI ...

  2. java signature 性能_Java常见bean mapper的性能及原理分析

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换.赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils.BeanCopier.Dozer. ...

  3. java集合性能_Java集合性能分析-疯狂Java讲义

    一.各Set实现类的性能分析 HashSet和TreeSet是Set的两个典型实现.HashSet的性能总是比TreeSet好(特别是最常用的添加.查询元素等操作),因为TreeSet需要额外的红黑树 ...

  4. java 反射 性能_java高性能反射及性能对比

    java编程中,使用反射来增强灵活性(如各类框架).某些抽象(如各类框架)及减少样板代码(如Java Bean). 因此,反射在实际的java项目中被大量使用. 由于项目里存在反射的性能瓶颈,使用的是 ...

  5. java strim性能_Java代码性能优化总结

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  6. java cardlayout性能_java布局管理之CardLayout简单实例

    本文实例为大家分享了java布局管理之CardLayout的具体代码,供大家参考,具体内容如下 import java.awt.BorderLayout; import java.awt.CardLa ...

  7. java cardlayout性能_java中的CardLayout的运用

    我编了个窗口界面想实现点击按钮切换页面的功能,就是各个面板(装有相关的组件)的切换,帮忙修改下,一实现功能,若是有别的好方法也可以帮助写下,小弟感激了啊!!!importjava.a... 我编了个窗 ...

  8. java 多线程性能_java多线程性能浅析

    今天看见je上一帖,对于上亿数据求和的算法,采用多线程到底快还是慢,我认为需要按情况而定. 1.单核,无IO,网络等资源操作情况下 结果:多线程比单线程理论上要慢 原因:多线程启动线程需要消耗cpu资 ...

  9. java复制文件_java多种文件复制方式以及效率比较

    1.背景 java复制文件的方式其实有很多种,可以分为 - 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,Buffere ...

最新文章

  1. alert()的功能_前端实现简单的图片上传小图预览功能
  2. 在 Excel 2016 for Windows 中启用 Power View
  3. pstools psexec 执行文件
  4. [导入]存储过程-分隔符号-多条件查询
  5. C# using 使用方法
  6. 腾讯IDG投资的明星无人车公司Zoox,拿下硅谷第一张载客许可
  7. linux bash学习(一)
  8. android的listview单项中包含RadioButton,实现RadioButton的单选显示效果
  9. iso12233测试方法_ISO12233 Test Chart (ISO12233标准分辨率测试卡)使用说明
  10. CSDN有奖任务答案
  11. 动态域名解析ipv6 群辉dnspod_群晖设置ipv6动态域名
  12. SpringBoot基础-Environment解析
  13. monkey 压力测试 随机
  14. 【播放器】播放器/短视频 SDK 架构设计
  15. Photo Album: 2008年5月-三亚爱琴海岸康年度假村-day2
  16. c语言射击类打飞机小游戏感悟
  17. Eclipse+tomcat开发j2ee经典入门例子
  18. 用【python】自做动图
  19. 怎么在电脑上用计算机,如何把旧电脑变成云电脑?戳这里
  20. linux中fflush函数和printf函数 【转】

热门文章

  1. 第三周笔记 c++ Boolan
  2. 数据的统计分析与描述
  3. 36幅非常漂亮的阳光摄影作品欣赏
  4. 易语言客户端请求http_HTTP的重点问题
  5. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())
  6. python 驱动级鼠标_罗技各系鼠标测评(2020年12月更新)
  7. 从零开始学前端:if判断,for循环,,switch判断 --- 今天你学习了吗?(JS:Day4)
  8. centOS 8+VMwware配置(2)
  9. Python标准库datetime中4种基本对象的用法
  10. 微课|中学生可以这样学Python(2.3.3节):内置函数zip()