到底什么是时序数据库?
在我听说过的许多数据库领域的名词中,“时序数据库”是一个严重过载的概念。即使听上去很简单,但是在许多商业产品的包装下,它的定义变得十分模棱两可。在这篇文章中,我想给“时序数据”一个清晰的定义,以帮助你理解为什么会有这样的一类数据库、它应该用于什么场景、以及如何将你的数据正确建模成时序数据。
在我听说过的许多数据库领域的名词中,“时序数据库”是一个严重过载的概念。即使听上去很简单,但是在许多商业产品的包装下,它的定义变得十分模棱两可。在这篇文章中,我想给“时序数据”一个清晰的定义,以帮助你理解为什么会有这样的一类数据库、它应该用于什么场景、以及如何将你的数据正确建模成时序数据。
Stable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。
前言: 大数据浪潮已经火了十几年,但是流处理领域似乎一直不温不火。直到近两年,从 Confluent(Kafka 背后的商业化公司)上市,到 Snowflake、Databricks 纷纷投资 Streaming,再到 Decodable、Immerok 这些 start-up 公司的涌现。今年 2023 SIGMOD Systems Award 意外颁发给了 Apache Flink,让人不免有些兴奋——流计算的好时代终于到来了吗?
今天从技术的角度聊聊流计算(Streaming)技术。尽管概念上有许多共通之处,例如时间窗口、水位(Watermark)等等,但其实在实现层面上,各个系统几乎都有独特的设计。所谓“存在即合理”,这种系统设计的多样性也正呼应了流计算应用场景的多样性,而并非简单的单一维度上的孰好孰坏。
本文从内部实现的角度,深入对比了市面上常见的流计算系统,包括 Apache Flink、RisingWave、Spark Streaming、ksqlDB 等。希望这篇文章能在技术选型时对你有帮助。
众所周知,Apache Calcite 是为数不多的开源 Volcano/Cascades 查询优化器实现之一,最早脱胎于 Hive 的优化器,后来也被 Flink 等一众项目采用。
但事实上 Calcite 中的 VolcanoPlanner
并非像论文中描述的那样是一个 top-down 优化器。去年阿里云 MaxCompute
团队向 Calcite 提交了 PR,引入了新的 top-down
优化选项,同时也弥补了之前缺失的剪枝、pass-through 等特性。
本文假设读者已经对 Apache Calcite 以及 Volcano/Cascades 优化器的原理比较熟悉。
Milvus 是一个用于向量(Vector)存储和检索的特殊数据库,由国内的创业公司 Zilliz 开发。本文内容来自 Milvus 在 SIGMOD'21 上的论文 Milvus: A Purpose-Built Vector Data Management System。
Apache Doris 原名是 Palo,由百度于 2017 年开源,Palo 这个词来自 OLAP 的反转,寓意这是一个 OLAP 系统。
初次看到它的时候以为是又一个数据仓库产品,没怎么关注,直到最近才发现和我们熟悉的 Greemplum、Impala 等等有不少区别,其中最有特色的是它的数据模型,借鉴自 Google 2014 年公开在 VLDB 上的 Mesa。本文的前半部分也会聊聊 Doris/Mesa 的数据模型是怎样的。
时间戳(timestamp)是分布式事务中绕不开的重要概念,有意思的是,现在主流的几个分布式数据库对它的实现都不尽相同,甚至是主要区分点之一。本文聊一聊时间戳的前世今生,为了把讨论集中在主题上,假设读者已经对数据库的 MVCC、2PC、一致性、隔离级别等概念有个基本的了解。
Yugabyte DB 是一个全球部署的分布式数据库,和国内的 TiDB 和国外的 CockroachDB 类似,也是受到 Spanner 论文启发,所以在很多地方这几个数据库存在不少相似之处。
与 Cockroach 类似,Yugabyte 也主打全球分布式的事务数据库——不仅能把节点部署到全球各地,还能完整支持 ACID 事务,这是他最大的卖点。除此以外还有一些独特的特性,比如支持文档数据库接口。如果我猜的没错,Yugabyte 早期被设计成一个文档数据库,后来才调整技术路线开始主打 SQL 接口。
在过去很长一段时间内,HotSpot JVM 的首选垃圾收集器都是 ParNew + CMS 组合。直到 JDK7 中 Hotspot 团队首次公布了 G1(Garbage-First),并在 JDK9 中用 G1 作为默认的垃圾收集器。我们团队最近也将用了很多年的 CMS 换成了 G1 垃圾收集器。
本文主要从 G1 的论文 Garbage-First Garbage Collection 出发,结合其他较新的白皮书等,讲解 G1 垃圾收集器的工作原理。
Javadoc 是 Java 编程中很重要的一部分,然而却很少有人谈论如何去写好一个的 Javadoc。如果想写好 Javdoc,首先最好有一份代码规范。
我之前尝试过一些 Javadoc 的标准。考虑到每个人喜好不同,我这里只想谈谈最基本的一些原则,不去涉及方方面面的细节。另外,我们只讨论 Javadoc 的格式,其内容不在本文范围之内。