如何通过ID数组从RethinkDB批量获取大量文档?
解决RethinkDB批量查询ID的性能问题
嘿,我太懂你在600万文档的数据库里用filter慢到头疼的感觉了!别纠结,get_all才是处理这种批量ID查询的正确打开方式,用法比你想的简单多了:
正确的get_all写法
你完全不用把1000个ID挨个列出来,直接用r.args()把你的ID数组传进去就行,记得指定索引参数:
r.table("users").get_all(r.args(ids), {index: "id"})
这里r.args()的作用是把数组ids展开成get_all需要的可变参数列表,完美适配你有大量ID的场景。
为什么之前的filter这么慢?
你用的filter写法:
r.table("users").filter{ |doc| r.expr(ids).contains(doc["id"])}
会触发全表扫描——RethinkDB得遍历600万条文档,逐个检查ID是否在你的数组里,这种操作在大数据量下肯定快不起来。而get_all是直接利用id索引精准查找,索引是预构建好的,能直接定位到匹配的文档,性能差距会非常明显。
关键前提:确保索引已创建
要让get_all发挥作用,你得先给users表的id字段创建二级索引(如果还没建的话):
r.table("users").index_create("id")
然后等索引构建完成(避免查询时索引还没就绪):
r.table("users").index_wait("id")
这么操作之后,你的批量ID查询速度会有质的飞跃!
内容的提问来源于stack exchange,提问作者Alexander Nikolaev
相关产品推荐
相关产品推荐

