为什么要使用ES
(1):大规模数据如何检索?
如:当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:
- 1)用什么数据库好?(mysql、sybase、oracle、达梦、神通、mongodb、hbase…)
- 2)如何解决单点故障;(lvs、F5、A10、Zookeep、MQ)
- 3)如何保证数据安全性;(热备、冷备、异地多活)
- 4)如何解决检索难题;(数据库代理中间件:mysql-proxy、Cobar、MaxScale等;)
- 5)如何解决统计分析问题;(离线、近实时)
(2)传统数据库的应对解决方案
对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写入瓶颈: 解决要点:
- 1)通过主从备份解决数据安全性问题;
- 2)通过数据库代理中间件心跳监测,解决单点故障问题;
- 3)通过代理中间件将查询语句分发到各个slave节点进行查询,并汇总结果
(3)非关系型数据库的解决方案
对于Nosql数据库,以mongodb为例,其它原理类似: 解决要点:
- 1)通过副本备份保证数据安全性;
- 2)通过节点竞选机制解决单点问题;
- 3)先从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果
从前面讨论我们了解到,把数据放在内存也好,不放在内存也好,都不能完完全全解决问题。
全部放在内存速度问题是解决了,但成本问题上来了。
为解决以上问题,从源头着手分析,通常会从以下方式来寻找方法:
1、存储数据时按有序存储;
2、将数据和索引分离;
3、压缩数据;
这就引出了Elas