福哥答案2020-07-13:
有人觉得第一种方法好,也有人觉得第二种方法好。
如果搜索字段远小于显示字段,比如搜索字段为3个,显示字段有20个,这个时候用第一种方法好。es+hbase,一般这样搭配。
如果搜索字段跟显示字段接近,或者一条【行记录】的数据量并不大,这个时候用第二种方法好。
回答1:
ES 的批量修改和并发控制比较头疼,不如直接用数据库来的舒服,但是如果用了数据库就要做数据同步。视具体场景而定吧。
回答2:
我们是第一种方法,ES 只放 ID+列表项+搜索项,列表是 ES 直出,详情 MySQL 根据 ID 查询。
回答3:
我们 2 种都有。场景:
1.搜索商品:全部存 ES,从 ES 出;商品信息相对固定,又搜索频率高,直接拿 ES 快速搜索。
2.搜索文章:文章内容存 ES,从 ES 检索出 ID,再捞一遍数据库,同时 with 当前用户数据(浏览量、点赞、收藏、热度等等);文章搜索频率比较低,又侧重不停变化的用户数据,需要拿数据库的最新数据。
回答4:
从 ES 中根据 name 和 age 去搜索,拿到的结果可能就 20 个 doc id,然后根据 doc id 到 HBase 里去查询每个 doc id 对应的完整的数据,给查出来,再返回给前端。
而写入 ES 的数据最好小于等于,或者是略微大于 ES 的 Filesystem Cache 的内存容量。
然后你从 ES 检索可能就花费 20ms,然后再根据 ES 返回的 id 去 HBase 里查询,查 20 条数据,可能也就耗费个 30ms。
如果你像原来那么玩儿,1T 数据都放 ES,可能会每次查询都是 5~10s,而现在性能就会很高,每次查询就是 50ms。
es我不熟悉,答案难免会出错,请直接评论。