用惯了关系型数据库再转到 es对父子关系习焉不察。 之前未曾踏入此坑,所以就斗胆用了。

父子关系导致磁盘占用分布不均

以相册和图片为例。相册有可见属性,图片没有,需从相册哪里继承,如果是 mysql 用关系型数据库这样的思想正常不过。
但是 es 上父与子必须在同一个 shard 上,因相册图片有多有少,文档分布不均那也是先花后果的事。

负载不均衡

如果用户进行了批量写操作,那么同一相册的图片必在同一机器。之前经常发生 es response timeout。

查看 节点状态: CURL _nodes/stats/thread_pool?pretty

一台机器 bulk queue 满,其他两台为空。

cpu 使用相当不合理

后来重建了索引,在同一的压力下,没有父子关系的索引 cpu 占用一直在 5% 以下,使用父子关系索引 cpu 未曾降过100%。
相差甚大,使人汗颜~!

操作麻烦

子文档必须找到父文档的 id 才能进行找到响应的 shard 然后进行相应的操作。

【总结】

如果可以不用那就千万不要用父子文档,虽然没有明文限制,就像 mysql like 查询,能不用就千万不用~!


螃蟹在晨跑
255 声望4 粉丝

Make it work, make it fast, make it best~!