<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>开源 on Zampo Blog</title><link>https://blog.cpdd.fyi/tags/%E5%BC%80%E6%BA%90/</link><description>Recent content in 开源 on Zampo Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2026 15:44:00 +0800</lastBuildDate><atom:link href="https://blog.cpdd.fyi/tags/%E5%BC%80%E6%BA%90/index.xml" rel="self" type="application/rss+xml"/><item><title>写出 Redis 的人，为什么宁愿当个糟糕的艺术家？</title><link>https://blog.cpdd.fyi/posts/redis-antirez-story/</link><pubDate>Fri, 10 Apr 2026 15:44:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/redis-antirez-story/</guid><description>&lt;p&gt;&lt;img src="https://blog.cpdd.fyi/Users/zampo/Documents/renbo-blog/static/images/redis-antirez-story/antirez-portrait.jpg" alt="程序员工作场景配图"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;程序员工作场景。图片来源：Pexels&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;很多人认识 Redis，是从性能图表开始的。&lt;/p&gt;
&lt;p&gt;它快，轻，几乎成了现代互联网的基础设施。缓存、排行榜、消息队列、实时分析，背后经常都站着它。可真正让我记住 Redis 的，不是这些功能，而是它的作者在 2020 年说的一句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I never wanted to be a software maintainer.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;我从来不想成为一个软件维护者。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这句话很刺耳。&lt;/p&gt;
&lt;p&gt;因为它等于承认了一件很多人不愿意承认的事：一个写出世界级系统的人，未必真的想一辈子为这个系统擦地板、补漏洞、回 issue、扛期待。&lt;/p&gt;
&lt;p&gt;他叫 Salvatore Sanfilippo，江湖名字 antirez。1977 年出生在意大利西西里岛，后来长期住在 Catania。和硅谷叙事里那种一路融资、一路扩张、一路当 CEO 的技术偶像不一样，他更像一个写代码的隐士：住在岛上，做开源，写博客，后来还去写科幻小说。&lt;/p&gt;</description></item><item><title>为什么 PostgreSQL 能超越 MySQL？这是我见过最全面的对比</title><link>https://blog.cpdd.fyi/posts/why-postgresql-beats-mysql/</link><pubDate>Thu, 02 Apr 2026 15:47:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/why-postgresql-beats-mysql/</guid><description>&lt;p&gt;用了 MySQL 好几年，最近深入研究 PostgreSQL，才发现自己一直在将就。&lt;/p&gt;
&lt;p&gt;不是 MySQL 不好，而是 PostgreSQL 在太多地方更胜一筹。这篇文章从四个维度把它说清楚：&lt;strong&gt;索引、数据一致性、性能、扩展性&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一索引postgresql-的玩法更多"&gt;一、索引：PostgreSQL 的玩法更多&lt;/h2&gt;
&lt;p&gt;两者的基础索引都是 B+ 树，但 PostgreSQL 的花样也太多了。&lt;/p&gt;
&lt;h3 id="聚簇-vs-非聚簇"&gt;聚簇 vs 非聚簇&lt;/h3&gt;
&lt;p&gt;MySQL（InnoDB）是&lt;strong&gt;聚簇索引&lt;/strong&gt;：数据按主键顺序存在叶子节点上，查主键很快，但非主键字段要先查二级索引再回表查一遍。&lt;/p&gt;
&lt;p&gt;PostgreSQL 的所有索引都是&lt;strong&gt;非聚簇索引&lt;/strong&gt;：数据单独存放在堆表里，索引只存指针。主键和普通索引没区别，插入数据直接追加到末尾，不用担心页分裂。&lt;/p&gt;
&lt;h3 id="gin-索引倒排索引"&gt;GIN 索引：倒排索引&lt;/h3&gt;
&lt;p&gt;PostgreSQL 的 GIN 索引简直是 JSON 数据的克星：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INDEX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx_attr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{&amp;#34;color&amp;#34;: &amp;#34;red&amp;#34;}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;一句 &lt;code&gt;@&amp;gt;&lt;/code&gt; 操作符就能查包含特定键值对的记录。&lt;strong&gt;MySQL 根本不支持。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="gist-索引什么都能索引"&gt;GiST 索引：什么都能索引&lt;/h3&gt;
&lt;p&gt;GiST 是一个索引框架，任何数据类型实现了接口就能用。&lt;/p&gt;
&lt;p&gt;地理坐标、时间范围、IP 区间……这些用 PostgreSQL 原生的 &lt;code&gt;daterange&lt;/code&gt; 加上 GiST 索引，查询重叠和距离效率极高。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reservations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;daterange&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[2026-01-08,2026-01-13]&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2026-01-10&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;MySQL 也不行。&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>