<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>All Posts - 华子的博客</title>
        <link>https://guluguluhhhh.github.io/posts/</link>
        <description>All Posts | 华子的博客</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Fri, 27 Jun 2025 16:38:22 &#43;0800</lastBuildDate><atom:link href="https://guluguluhhhh.github.io/posts/" rel="self" type="application/rss+xml" /><item>
    <title>coroutine</title>
    <link>https://guluguluhhhh.github.io/coroutine/</link>
    <pubDate>Fri, 27 Jun 2025 16:38:22 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/coroutine/</guid>
    <description><![CDATA[<h1 id="进程线程协程">进程、线程、协程</h1>
<p>线程是CPU调度的最小单位, 进程是资源分配的最小单位。对于线程和进程，我们可以这么理解：</p>
<ul>
<li>当进程只有一个线程时，可以认为进程就等于线程。</li>
<li>当进程拥有多个线程时，这些线程会共享相同的虚拟内存和全局变量等资源。这些资源在上下文切换时是不需要修改的。</li>
<li>线程也有自己的私有数据，比如栈和寄存器等，这些在上下文切换时也是需要保存的。</li>
</ul>
<p>协程作为用户态线程，也是轻量级的线程，用来解决高并发场景下线程切换的资源开销。协程跟线程是有区别的</p>]]></description>
</item>
<item>
    <title>PolarDB MP</title>
    <link>https://guluguluhhhh.github.io/polardb-mp/</link>
    <pubDate>Sat, 14 Jun 2025 17:51:06 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/polardb-mp/</guid>
    <description><![CDATA[<h1 id="摘要">摘要</h1>
<p>传统的主从架构（<strong>Primary- secondary</strong>）数据库的写入能力有限，因为其使用单个主节点来写入，从节点只是同步数据。所以一些系统采用无共享架构（<strong>shared-nothing</strong>），实现了可扩展的多主节点集群，但带来了分布式事务的开销和性能损失。最近，出现基于共享存储（<strong>shared-stroage</strong>）的多主节点云原生数据库，存算分离，避免了分布式事务，但在高冲突场景下仍表现不佳，原因有冲突解决、数据融合等。</p>]]></description>
</item>
<item>
    <title>Mit6.5840 Raft</title>
    <link>https://guluguluhhhh.github.io/mit6.5840-raft/</link>
    <pubDate>Sun, 02 Mar 2025 18:49:48 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/mit6.5840-raft/</guid>
    <description><![CDATA[<h2 id="3a-领导人选举">3A 领导人选举</h2>
<p>3A主要实现的是领导者选举和心跳（没有日志条目的<code>AppendEntries</code>RPC）。</p>
<p>基本上根据论文的图2来定义结构体。Raft结构体加上electionTimeOut bool来标记某个服务器是否超时，超时未收到心跳需要发起新一轮选举。
</p>]]></description>
</item>
<item>
    <title>Raft论文阅读记录</title>
    <link>https://guluguluhhhh.github.io/raft/</link>
    <pubDate>Thu, 20 Feb 2025 14:24:11 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/raft/</guid>
    <description><![CDATA[<h1 id="摘要">摘要</h1>
<p>Raft是一种用于管理复制日志的共识算法。它的结果等价与Paxos，并且效率相当，但它的结构更容易理解。为了增强可理解性，Raft将共识的关键要素（例如领导者选举、日志复制和安全性）分离开来，并强制执行更强的一致性要求，从而减少了需要考虑的状态数量。此外，Raft 还引入了一种新的集群成员变更机制，该机制通过使用重叠的多数派来保证安全性。</p>]]></description>
</item>
<item>
    <title>Mit6.5840 KVServer</title>
    <link>https://guluguluhhhh.github.io/mit6.5840-kvserver/</link>
    <pubDate>Tue, 18 Feb 2025 16:00:38 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/mit6.5840-kvserver/</guid>
    <description><![CDATA[<h1 id="keyvalue-server">Key/Value Server</h1>
<p>本次试验中，将为一台机器构建一个键值服务器，该服务器确保即使网络故障，每个操作<strong>也只执行一次</strong>，且操作是<strong>线性化</strong>的。后面的实验将会复制这样的服务器来处理服务器崩溃。</p>]]></description>
</item>
<item>
    <title>Mit6.5840 MapReduce</title>
    <link>https://guluguluhhhh.github.io/mit6.5840-mapreduce/</link>
    <pubDate>Sat, 15 Feb 2025 14:45:18 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/mit6.5840-mapreduce/</guid>
    <description><![CDATA[<h1 id="mapreduce">MapReduce</h1>
<p>这次实验将构建一个MapReduce系统。需要实现一个<strong>worker</strong>进程，它调用应用程序<strong>Map</strong>和<strong>Reduce</strong>函数并处理阅读和写入文件，以及一个<strong>coordinator</strong>进程，它将任务分发给worker并处理失败的worker。</p>]]></description>
</item>
<item>
    <title>Cmu15445 Concurrency Control</title>
    <link>https://guluguluhhhh.github.io/cmu15445_concurrency_control/</link>
    <pubDate>Thu, 02 Jan 2025 13:35:16 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/cmu15445_concurrency_control/</guid>
    <description><![CDATA[<h1 id="concurrency-control">Concurrency Control</h1>
<p>在这个项目中，你将通过实现乐观多版本并发控制（MVOCC）来为BusTub添加事务支持。</p>
<h2 id="timestamps">Timestamps</h2>
<h3 id="timestamp-allocation">Timestamp Allocation</h3>
<blockquote>
<p>当一个事务开始时，它将被分配一个<strong>读时间戳</strong>，这是最近提交的事务的提交时间戳。在事务提交时，它将被分配一个单调递增的<strong>提交时间戳</strong>。<strong>读时间戳确定事务可以读取哪些数据，而提交时间戳确定事务的序列化顺序。</strong></p>]]></description>
</item>
<item>
    <title>Cmu15445 Query Execution</title>
    <link>https://guluguluhhhh.github.io/cmu15445-query_execution/</link>
    <pubDate>Fri, 20 Dec 2024 10:45:30 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/cmu15445-query_execution/</guid>
    <description><![CDATA[<h1 id="query-execution">Query Execution</h1>
<p>在这次项目中，将实现允许 BusTub 执行查询的组件。具体是创建执行 SQL 查询的运算符执行程序，并实施优化器规则来转换查询计划。</p>
<p>BusTub的架构如下：
</p>]]></description>
</item>
<item>
    <title>Cmu15445 Buffer Pool</title>
    <link>https://guluguluhhhh.github.io/cmu15445-buffer_pool/</link>
    <pubDate>Mon, 09 Dec 2024 16:49:33 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/cmu15445-buffer_pool/</guid>
    <description><![CDATA[<h1 id="buffer-pool">Buffer Pool</h1>
<p>这个project是要在存储管理器中实现一个buffer pool，即<strong>缓冲池</strong>。缓冲池其实就是一块大的内存区域<strong>主内存</strong>，负责与<strong>磁盘</strong>之间来回移动物理页。它使得DBMS支持大于系统可用内存的数据库。缓冲池的操作对系统中的其他部分应该是透明的。例如，系统使用唯一标识符<code>page_id_t</code>想缓冲池请求页面的时候，系统不知道该页面是否位于已经在内存中，或者是需要从磁盘检索。</p>]]></description>
</item>
<item>
    <title>Cmu15445 Extendible Hash Index</title>
    <link>https://guluguluhhhh.github.io/cmu15445-extendible_hash_index/</link>
    <pubDate>Sun, 01 Dec 2024 12:41:00 &#43;0800</pubDate>
    <author>huazi</author>
    <guid>https://guluguluhhhh.github.io/cmu15445-extendible_hash_index/</guid>
    <description><![CDATA[<h1 id="extendible-hash-index">Extendible Hash Index</h1>
<p>在此编程项目中，将使用<strong>可扩展哈希</strong>的变体作为哈希方案，在数据库系统中实现磁盘支持的哈希索引。</p>
<p>下图显示了一个可扩展哈希表，其中<code>header</code>页最大深度为 2，<code>directory</code>页最大深度为 2，存储<code>bucket</code>页最多包含两个条目。值被省略，并且<strong>键的哈希值</strong>显示在<code>bucket</code>页面中，而不是键本身。</p>]]></description>
</item>
</channel>
</rss>
