用惯了关系型数据库再转到 es对父子关系习焉不察。 以前不曾踏入此坑,因此就斗胆用了。
以相册和图片为例。相册有可见属性,图片没有,需从相册哪里继承,若是是 mysql 用关系型数据库这样的思想正常不过。
可是 es 上父与子必须在同一个 shard 上,因相册图片有多有少,文档分布不均那也是先花后果的事。node
若是用户进行了批量写操做,那么同一相册的图片必在同一机器。以前常常发生 es response timeout。mysql
查看 节点状态: CURL _nodes/stats/thread_pool?pretty
sql
一台机器 bulk queue 满,其余两台为空。数据库
后来重建了索引,在同一的压力下,没有父子关系的索引 cpu 占用一直在 5% 如下,使用父子关系索引 cpu 不曾降过100%。
相差甚大,令人汗颜~!code
子文档必须找到父文档的 id 才能进行找到响应的 shard 而后进行相应的操做。继承
【总结】索引
若是能够不用那就千万不要用父子文档,虽然没有明文限制,就像 mysql like 查询,能不用就千万不用~!图片