BytePower 技术周刊 - 026

2022/7/18

# BytePower 技术周刊 - 026

# 📘 封面


美国宇航局 (opens new window)的詹姆斯韦伯太空望远镜提供了迄今为止最深、最清晰的遥远宇宙红外图像。

# 📖 文章

# 细说 Redis 7.0 的九种数据类型及应用场景,这也太全了叭! (opens new window)(中文)

我们都知道 Redis 提供了丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。 随着 Redis 版本的更新,后面又支持了四种数据类型:BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。 每种数据对象都各自的应用场景,你能说出它们各自的应用场景吗?

# 扩展阅读

  1. 从 Redis7.0 发布看 Redis 的过去与未来 (opens new window)(中文)
  2. Redis 7.0 Multi Part AOF 的设计和实现 (opens new window)(中文)
  3. Redis 7.0 共享复制缓冲区的设计与实现 (opens new window)(中文)

# 16 年后重谈 P 和 NP (opens new window)(中文)

虽然种种证据表明 P ≠ NP,但我们仍然无法排除 P = NP 的可能性。其实,如果 P 真的等于 NP,但时间复杂度的次数非常大非常大非常大,密码学的根基仍然不太可能动摇,我们的世界仍然不太可能大变。被誉为“算法分析之父”的计算机科学大师高德纳(Donald Knuth)还提出了这样一种可能:未来有人利用反证法证明了 P = NP,于是我们知道了所有 NP 问题都有多项式级的算法,但算法的时间复杂度究竟是多少,我们仍然一无所知!

# How SHA-256 Works Step-By-Step (opens new window)(英文)

SHA-2 (Secure Hash Algorithm 2), of which SHA-256 is a part, is one of the most popular hash algorithms around. A cryptographic hash, also often referred to as a “digest”, “fingerprint” or “signature”, is an almost perfectly unique string of characters that is generated from a separate piece of input text. For example, SHA-256 generates a 256-bit (32-byte) signature.

Further down in this article, we will break down each step of SHA 256’s cryptographic algorithm and work through a real example by hand.

# 谷歌软件工程 (opens new window)(中文/英文)

与那些更成熟的工程专业不同,目前的软件工程理论或实践还没有那么严格。航空工程师必须遵循严格的准则和实践,因为他们的计算错误会造成真正的损失;而编程,总体来说,传统上没有遵循这样严格的实践。但是,随着软件越来越多地融入我们的生活,我们必须采用并依赖更严格的工程方法。我们希望这本书能帮助其他人看到一条通往更可靠的软件实践的道路。

# 基于大数据的 OLAP 技术,四个角度一篇讲明白 (opens new window)(中文)

随着 DT 时代的到来,越来越多的业务需求要求大数据系统既能处理历史数据,又能进行实时计算,同时越来越要求运营的时效性,以便即时评估运营活动效果,即时调整策略。针对实时大数据统计分析系统,有两种架构设计路线:Lambda 和 Kappa。

  • Lambda 架构包含三层:批处理层(Batch Layer)、速度层(Speed Layer)和服务层(Serving Layer)。批处理层对历史数据进行预处理,速度层处理新增实时数据,服务层实现上述两层处理结果的融合,将其合并为统一视图,为用户提供全时域数据分析查询。每层可以分别选择合适的大数据组件来构建系统,比如用 Spark 构建批处理层、用 Flink 构建速度层。
  • Kappa 架构在 Lambda 架构的基础上去掉了批处理层,对速度层进行了改进,使其既能够支持实时数据处理,又能够支持历史数据处理。Kappa 架构只有实时层和服务层。Kappa 架构通常是将流式框架中的数据通道替换成消息队列(如 Kafka),可以设定一定的保留期限,如分析逻辑改变,重新从消息队列消费数据处理即可。

# 慢 SQL 分析与优化 (opens new window)(中文)

优化思路

  • 减少数据扫描(减少磁盘访问)
  • 尽量在查询中加入一些可以提前过滤数据的谓词条件,比如按照时间过滤数据等,可以减少数据的扫描量,对查询更友好
  • 在扫描大表数据时是否可以命中索引,减少回表代价,避免全表扫描
  • 返回更少数据(减少网络传输或磁盘访问)
  • 减少交互次数(减少网络传输)
  • 将数据存放在更快的地方
  • 某条查询涉及到大表,无法进一步优化,如果返回的数据量不大且变化频率不高但访问频率很高,此时应该考虑将返回的数据放在应用端的缓存当中或者 Redis 这样的缓存当中,以提高存取速度
  • 减少服务器 CPU 开销(减少 CPU 及内存开销)
  • 避免大事务操作 -利用更多资源(增加资源)

# SQL 子查询的优化 (opens new window)(中文)

子查询(Subquery)的优化一直以来都是 SQL 查询优化中的难点之一。关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受。当数据量稍大时,必须在优化器中对其进行去关联化(Decoorelation 或 Unnesting),将其改写为类似于 Semi-Join 这样的更高效的算子。

# 📜 新闻

# ES2022 Features! (opens new window)(中文)

# Stack Overflow Developer Survey 2022 (opens new window)(英文)

# 🧰 工具

# TinyWow (opens new window)

这个网站提供很多实用功能,包括大量文件转换、图像文件处理、视频处理、字数统计、简单文档处理器等等。更重要的是这些功能都是免费的,而且不需要注册,可以帮我们提高生产效率,改变工作方式

# appwrite (opens new window)

Secure Open-Source Backend Server for Web, Mobile & Flutter Developers

Appwrite is a self-hosted backend-as-a-service platform that provides developers with all the core APIs required to build any application.

# Run Python in Your HTML (opens new window)

# Paperless-ngx (opens new window)

一个用来管理个人文档的开源软件,可以把 PDF、Office、图片文件等都放在里面,需要自己架设服务。

上次更新: 2022/7/18 17:49:37