用惯了关系型数据库再转到 es对父子关系习焉不察。 之前未曾踏入此坑,所以就斗胆用了。
父子关系导致磁盘占用分布不均
以相册和图片为例。相册有可见属性,图片没有,需从相册哪里继承,如果是 mysql 用关系型数据库这样的思想正常不过。
但是 es 上父与子必须在同一个 shard 上,因相册图片有多有少,文档分布不均那也是先花后果的事。
负载不均衡
如果用户进行了批量写操作,那么同一相册的图片必在同一机器。之前经常发生 es response timeout。
查看 节点状态: CURL _nodes/stats/thread_pool?pretty
一台机器 bulk queue 满,其他两台为空。
cpu 使用相当不合理
后来重建了索引,在同一的压力下,没有父子关系的索引 cpu 占用一直在 5% 以下,使用父子关系索引 cpu 未曾降过100%。
相差甚大,使人汗颜~!
操作麻烦
子文档必须找到父文档的 id 才能进行找到响应的 shard 然后进行相应的操作。
【总结】
如果可以不用那就千万不要用父子文档,虽然没有明文限制,就像 mysql like 查询,能不用就千万不用~!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。