ARTS-WEEK-009|Calcite|高并发缓存|心智成熟
Algorithm:
08.03: Magic Index LCCI (Easy)
基于有序数组的算法,一般可以利用二分法,对基本二分法中三种情况分别考察,首先 nums[mid] == mid 时,mid 符合条件,但题目要求返回第一个符合条件的索引,因此还需要先在左半边找,没找到才选择这个;其次 nums[mid] < mid 和 nums[mid] > mid 时,都无法说明说明结果在左半部分或右半部分。因此整体逻辑是先找左半部分、再选择 mid,最后去右半部分找,都找不到返回 -1,这个过程中每进入区间可以用 nums[low] > high || nums[high] < low 返回 -1 进行剪枝,但是总体时间复杂度仍然是 O(n)。
还有一种更简单办法,就是通过数组跳跃定位,当遇到 nums[i] > i 时,直接 i = nums[i] 跳跃到下一个可能满足条件的位置,也能起到很好的加速作用。
private int jumpFind(int[] nums) {
for (int i = 0; i < nums.length;) {
if (nums[i] == i) {
return i;
}
if (nums[i] < i) {
i++;
} else {
i = nums[i];
}
}
return -1;
}
Review:
Calcite 是一个基础查询层框架, 它面向各类大数据处理系统,提供了可扩展的查询语言定义、解析、验证、优化、执行的统一框架。核心模块包括:1 内置大量优化规则的可扩展的查询优化器(query optimizer)、2 可以自定义语言的查询处理器(query processor)、3 支持大量异构模型和大数据系统的适配器(adapter),整体上看 Calcite 像是一个故意缺失了存储层(包括数据读写处理)的DBMS。此外还灵活地支持大数据框架选择它实现SQL语法定义、解析、校验、优化、转换等步骤中一项或全部功能。比如 hive 仅使用 calcite 作为优化器,而 flink 选择了以上全部功能。最后即使未使用calcite的大数据系统,也可以通过针对该系统的适配器组件,实现SQL查询,甚至实现跨异构系统的join和优化。
Tip:
高并发场景的多级缓存和实时反馈设计
反馈(Feedback)是控制论中的一个基本概念,是指系统输出的全部或部分信息通过一定的通道返送到输入端,从而对系统的输入和再输出施加影响的过程。
在每秒百万级的高并发场景中,数据库不能直接扛量,因为一般SSD的单库最高不到1万的TPS,而Redis也不是银弹,单分片最多也是10万TPS量级。这种情况下需要在服务实例中使用本地缓存,如 Guava、Caffeine 作为L1一级缓存,因为存放在 JVM 堆内,速度最快但容量有限,过多会影响GC。之后是堆外缓存作为 L2 缓存,如 OHC,可以存放更多数据,但是由于需要序列化步骤比前者稍慢。最后才是访问 Redis 集群,作为 L3 Cache,而 Redis 中的数据通过 DB 主动写入。
举一个具体实例,如秒杀场景中,L1中存放商品库存状态(包括分片库存Key状态),L2中存储用户黑名单等,L3中存储分片后的库存信息和用户订单信息等。当用户请求到来时通过三级缓存后完成 Redis 中下单,之后通过异步消息完成最终下单,同时也通过流处理系统进行反馈控制,比如根据库存信息更新L1中状态、根据用户实时行为更新L2黑名单等。
Share:
《少有人走的路》简单总结
- 心智成熟是一条少有人走的路,人生充满苦难,而人们趋向于的规避问题和逃避痛苦,这是人类心理疾病的根源(退行、疑病症、强迫症),不仅会使心灵停止成长,甚至导致退化和萎缩,使心智永远难以成熟。
- 自律是解决人生问题和消除痛苦的最重要的手段,它不是意志和能力,而是积极主动去承受痛苦和解决问题的态度,包含四个原则:推迟满足感(先面对痛苦和解决问题,再享受快乐)、承担责任(解决问题的前提、承担自身行为的结果)、拥抱事实(避免移情、接收挑战和质疑、保持诚实、修正人生地图)、保持平衡(弹性、释放情绪、放弃)。
- 爱是自律和前行的原动力,而真爱不是为了自己的需要,真爱的目的是为了促进心智的成熟。
- 心智成熟的最终目的是与自己内心达成一致,主要是意识与潜意识认同和融合。