高并发架构面试题之搜索引擎(二)

面试题1

es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

面试官心理分析

这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了。第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒。

这样就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对 es 确实玩儿的不怎么样?

面试题剖析

说实话,es 性能优化是没有什么银弹的,啥意思呢?就是不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景。也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。

性能优化的杀手锏——filesystem cache

你往 es 里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 filesystem cache 里面去。
在这里插入图片描述
es 的搜索引擎严重依赖于底层的 filesystem cache,你如果给 filesystem cache 更多的内存,尽量让内存可以容纳所有的 idx segment file 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。

性能差距究竟可以有多大?我们之前很多的测试和压测,如果走磁盘一般肯定上秒,搜索性能绝对是秒级别的,1秒、5秒、10秒。但如果是走 filesystem cache,是走纯内存的,那么一般来说性能比走磁盘要高一个数量级,基本上就是毫秒级的,从几毫秒到几百毫秒不等。

这里有个真实的案例。某个公司 es 节点有 3 台机器,每台机器看起来内存很多,64G,总内存就是 64 * 3 = 192G。每台机器给 es jvm heap 是 32G,那么剩下来留给 filesystem cache 的就是每台机器才 32G,总共集群里给 filesystem cache 的就是 32 * 3 = 96G 内存。而此时࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,高并发面试题通常关注线程安全、并发控制、锁机制、多线程设计模式和性能优化等内容。以下是一些常见的面试问题: 1. **什么是线程安全?** - 线程安全是指多个线程同时访问共享资源时,不会出现数据不一致或程序行为不可预测的情况。 2. **Java中哪些集合类是线程安全的?** - Java集合框架中的`ConcurrentHashMap`、`CopyOnWriteArrayList`、`CopyOnWriteArraySet`等是线程安全的。 3. **什么是`synchronized`关键字?** - `synchronized`用于同步代码块或方法,防止多个线程同时执行,保证了对共享资源的互斥访问。 4. **区别`synchronized`和`ReentrantLock`?** - `synchronized`更简单直接,但没有提供锁的粒度控制;`ReentrantLock`提供了更多的灵活性,比如可中断锁和公平锁。 5. **什么是阻塞队列?** - 如`BlockingQueue`,如`ConcurrentLinkedQueue`、`ArrayBlockingQueue`等,它们在并发场景下用于任务的生产和消费。 6. **`volatile`关键字的作用是什么?** - 它保证了多线程环境下的可见性和内存一致性,尤其在变量可能被多个线程修改的情况下。 7. **什么是死锁?如何避免死锁?** - 死锁是指两个或多个线程相互等待对方释放资源而造成的一种僵局。避免方法包括避免循环等待资源、设置超时等。 8. **什么是线程池?** - 线程池可以复用已有线程,控制并发数,提高系统性能和资源利用率。 9. **Spring框架中的`@Async`是什么?** - Spring的异步处理注解,用于将任务提交给后台执行,避免阻塞主线程。 10. **`ExecutorService`和`Future`接口的区别?** - `ExecutorService`负责执行任务,`Future`则提供了对任务执行结果的访问和状态检查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值