<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Appendices on Hironobu SUZUKI @ InterDB</title>
    <link>http://www.interdb.jp/pg/pgsqlappendix/index.html</link>
    <description>Recent content in Appendices on Hironobu SUZUKI @ InterDB</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language><atom:link href="http://www.interdb.jp/pg/pgsqlappendix/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A.1. Derivation of Variance Calculation Formulas</title>
      <link>http://www.interdb.jp/pg/pgsqlappendix/01.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://www.interdb.jp/pg/pgsqlappendix/01.html</guid>
      <description>&lt;h2 id=&#34;a-1-1&#34;&gt;A.1.1. Derivation of the Youngs and Cramer Method&lt;/h2&gt;
&lt;p&gt;The Youngs and Cramer method is an enhancement of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford%27s_online_algorithm&#34; target=&#34;_blank&#34;&gt;Welfold&amp;rsquo;s online&lt;/a&gt; method.
To understand the derivation of the Youngs and Cramer method, the Welford method is examined first.&lt;/p&gt;
&lt;h5 id=&#34;welfold-method&#34;&gt;Welfold method:&lt;/h5&gt;
&lt;p&gt;Welford&amp;rsquo;s method for calculating variance is defined by the following recurrence relation:&lt;/p&gt;

&lt;span class=&#34;math align-center&#34;&gt;$$
V_{n} = V_{n-1} + \frac{n-1}{n} (x_{n} - A_{n-1})^{2}
$$&lt;/span&gt;&lt;p&gt;The derivation of this relation is as follows:&lt;/p&gt;

&lt;span class=&#34;math align-center&#34;&gt;$$
\begin{align*}
V_{n} &amp;= \sum_{i=1}^{n} (x_{i} - A_{n})^{2} = \sum_{i=1}^{n-1} (x_{i} - A_{n})^{2} + (x_{n} - A_{n})^{2} \\
      &amp;= \sum_{i=1}^{n-1} \left( (x_{i} - \frac{1}{n}((n-1)A_{n-1} + x_{n}) \right)^{2} + \left( (x_{n} - \frac{1}{n}((n-1)A_{n-1} + x_{n}) \right)^{2} \\
      &amp;= \sum_{i=1}^{n-1} \left( (x_{i} - A_{n-1}) - \frac{1}{n}(x_{n} - A_{n-1}) \right)^{2} + \left( \frac{1}{n} (nx_{n} - (n-1)A_{n-1} - x_{n} ) \right)^{2} \\
      &amp;= \sum_{i=1}^{n-1} \left( (x_{i} - A_{n-1})^{2} - \frac{2(x_{n} - A_{n-1})}{n}(x_{i} - A_{n-1})  + \frac{1}{n^{2}}(x_{n} - A_{n-1})^{2} \right)  \\
      &amp; \quad + \left( \frac{(n - 1) x_{n} - (n-1) A_{n-1}}{n} \right)^{2} \\
      &amp;= \sum_{i=1}^{n-1} (x_{i} - A_{n-1})^{2}  - \frac{2(x_{n} - A_{n-1})}{n} \sum_{i=1}^{n-1}(x_{i} - A_{n-1})  + \frac{1}{n^{2}} \sum_{i=1}^{n-1} (x_{n} - A_{n-1})^{2} \\
      &amp; \quad + \left( \frac{(n - 1) (x_{n} - A_{n-1})}{n} \right)^{2} \\
      &amp;= V_{n-1} - \frac{2(x_{n} - A_{n-1})}{n} \left( \sum_{i=1}^{n-1} x_{i} - (n-1)A_{n-1} \right)  + \frac{1}{n^{2}} (n-1) \cdot (x_{n} - A_{n-1})^{2} \\
      &amp; \quad + \left( \frac{n-1}{n} \right)^{2} (x_{n} - A_{n-1})^{2} \\
      &amp;= V_{n-1} - \frac{2(x_{n} - A_{n-1})}{n} (S_{n-1} - S_{n-1}) + \left( \frac{n-1}{n^{2}} + \left( \frac{n-1}{n}\right)^{2} \right) (x_{n} - A_{n-1})^{2} \\
      &amp;= V_{n-1} - \frac{2(x_{n} - A_{n-1})}{n} \cdot 0  + \frac{(n-1) + (n-1)^{2}}{n^{2}} (x_{n} - A_{n-1})^{2} \\
      &amp;= V_{n-1} + \frac{(n-1)(1 + (n-1))}{n^{2}} (x_{n} - A_{n-1})^{2} \\
      &amp;= V_{n-1} + \frac{n-1}{n} (x_{n} - A_{n-1})^{2}
\end{align*}
$$&lt;/span&gt;&lt;h5 id=&#34;youngs-and-cramer-method&#34;&gt;Youngs and Cramer method:&lt;/h5&gt;
&lt;p&gt;The Youngs and Cramer method modifies Welford&amp;rsquo;s method by replacing the average $A_{n-1}$ with the sum $S_{n-1}$ to improve computational efficiency and numerical stability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A.2. io_uring Examples</title>
      <link>http://www.interdb.jp/pg/pgsqlappendix/02.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://www.interdb.jp/pg/pgsqlappendix/02.html</guid>
      <description>&lt;p&gt;Knowledge of io_uring implementation examples clarifies Asynchronous I/O (AIO) in PostgreSQL. Below are two simple examples.&lt;/p&gt;
&lt;p&gt;These serve as a toy model of a buffer manager, asynchronously reading data from a file into slots in memory (Figure A3.1).&lt;/p&gt;
&lt;figure class=&#34;center&#34;&gt;
    &lt;img src=&#34;./fig-a-3-01.png&#34; width=&#34;430px&#34;/&gt; &lt;figcaption&gt;
            &lt;h6&gt;Figure A3.1. Toy Buffer Manager Model.&lt;/h6&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;The programs asynchronously read a 32-byte file (rel.data) into the &lt;em&gt;BufferPool&lt;/em&gt; array using four 8-byte read requests.&lt;/p&gt;
&lt;div class=&#34;wrap-code highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat rel.data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A0000000B0000001C0000010D0000011&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;wrap-code highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define BUFFER_SIZE 8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define PAGE_SIZE 8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; BufferPool[BUFFER_SIZE][PAGE_SIZE &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In these examples, the four logical blocks of rel.data are placed into BufferPool slots 3, 7, 1, and 0.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>