<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>DataBurst Data Engineering Wiki</title>
		<link>https://wiki.databurst.tech/</link>
		<description>Recent content on DataBurst Data Engineering Wiki</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<atom:link href="https://wiki.databurst.tech/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Columnar</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/columnar/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/columnar/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ clickhouse-client -q &#34;SELECT city, sum(amount) FROM orders GROUP BY city&#34;&lt;/div&gt;&#xA;&lt;h1 id=&#34;columnar-and-wide-column-databases&#34;&gt;Columnar and Wide-Column Databases&lt;a class=&#34;anchor&#34; href=&#34;#columnar-and-wide-column-databases&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;columnar (column-oriented) database&lt;/strong&gt; stores each column of a table separately on disk, so a query that needs 3 of 200 columns reads only those 3, and similar values packed together compress 5 to 10 times. This makes columnar engines such as &lt;strong&gt;ClickHouse, Apache Druid, Apache Pinot, Snowflake and BigQuery&lt;/strong&gt; the standard for analytics: scans and aggregations over billions of rows.&lt;/p&gt;</description>
			</item>
			<item>
				<title>TCP/IP</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/protocols/tcp/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/protocols/tcp/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ man 7 tcp   # RFC 791 (IP) · RFC 9293 (TCP)&lt;/div&gt;&#xA;&lt;h1 id=&#34;tcpip&#34;&gt;TCP/IP&lt;a class=&#34;anchor&#34; href=&#34;#tcpip&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;TCP/IP&lt;/strong&gt; is the protocol suite the internet runs on. &lt;strong&gt;IP&lt;/strong&gt; (Internet Protocol) moves individual packets from one machine to another by address, with no promises: packets can be lost, duplicated or reordered. &lt;strong&gt;TCP&lt;/strong&gt; (Transmission Control Protocol) runs on top and turns that unreliable packet service into a &lt;strong&gt;reliable, ordered byte stream&lt;/strong&gt; between two programs. Your database driver, HTTP client and Kafka producer all sit on a TCP connection.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Document Based</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/document-based/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/document-based/</guid>
				<description>&lt;h1 id=&#34;document-databases&#34;&gt;Document Databases&lt;a class=&#34;anchor&#34; href=&#34;#document-databases&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;document database&lt;/strong&gt; stores each record as a self-contained &lt;strong&gt;document&lt;/strong&gt;, usually JSON or a binary form of it (MongoDB&amp;rsquo;s BSON), grouped into &lt;strong&gt;collections&lt;/strong&gt;. A document can nest objects and arrays, and two documents in the same collection may have different fields. The idea: data that the application reads together is &lt;strong&gt;stored together&lt;/strong&gt;, so one lookup returns a whole order with its items and shipping address, without joins.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Key-Value</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/key-value/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/key-value/</guid>
				<description>&lt;h1 id=&#34;key-value-databases&#34;&gt;Key-Value Databases&lt;a class=&#34;anchor&#34; href=&#34;#key-value-databases&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;key-value store&lt;/strong&gt; is the simplest database model: you &lt;code&gt;put(key, value)&lt;/code&gt; and &lt;code&gt;get(key)&lt;/code&gt;, and the database treats the value as an opaque blob or a small data structure. Because every operation names exactly one key, the store can hash the key to find the right machine and answer in well under a millisecond. Caches, user sessions, feature flags, rate limiters and shopping carts are classic uses.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;a class=&#34;anchor&#34; href=&#34;#how-it-works&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lookup by key only.&lt;/strong&gt; There is no &amp;ldquo;find all users in Tehran&amp;rdquo; unless you build that index yourself. Design keys around how you read: &lt;code&gt;session:8f3a&lt;/code&gt;, &lt;code&gt;cart:u-42&lt;/code&gt;, &lt;code&gt;rate:ip:10.0.0.7:2026-11-16T09:30&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Partitioning by hash.&lt;/strong&gt; In a cluster, &lt;code&gt;hash(key)&lt;/code&gt; decides which node owns the key. Redis Cluster uses 16,384 hash slots; DynamoDB hashes the partition key. Adding nodes moves only some keys. See &lt;a href=&#34;https://wiki.databurst.tech/docs/roadmap/distributed-systems-concepts/sharding/&#34;&gt;Sharding&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;In memory or on disk.&lt;/strong&gt; Redis and Valkey keep everything in RAM (with optional snapshots and an append-only file for durability). DynamoDB, RocksDB and FoundationDB store data on SSD and are fully durable.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Expiry.&lt;/strong&gt; A &lt;strong&gt;TTL&lt;/strong&gt; deletes a key automatically after a time, which is what makes key-value stores natural caches.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;popular-key-value-stores&#34;&gt;Popular key-value stores&lt;a class=&#34;anchor&#34; href=&#34;#popular-key-value-stores&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Store&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Storage&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Notes&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;&lt;a href=&#34;https://redis.io/&#34;&gt;Redis&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;In memory&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Rich value types: strings, hashes, lists, sets, sorted sets, streams. Licensing changed in 2024 (RSAL/SSPL); Redis 8 (2025) added AGPLv3 as an open-source option.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;&lt;a href=&#34;https://valkey.io/&#34;&gt;Valkey&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;In memory&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;BSD-licensed fork of Redis 7.2 under the Linux Foundation, created in 2024. Drop-in compatible; used by AWS ElastiCache and Google Memorystore.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;&lt;a href=&#34;https://aws.amazon.com/dynamodb/&#34;&gt;Amazon DynamoDB&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Durable, managed&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Key-value and document. Partition key plus optional sort key, single-digit-millisecond latency at any scale, pay per request or provisioned capacity.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;&lt;a href=&#34;https://rocksdb.org/&#34;&gt;RocksDB&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Embedded, on disk&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;An LSM-tree library, not a server. The storage engine inside Kafka Streams, Flink state, CockroachDB and many others.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;&lt;a href=&#34;https://etcd.io/&#34;&gt;etcd&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Durable, Raft-replicated&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Small, strongly consistent store for configuration and coordination (Kubernetes state). Not for bulk data.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;when-to-use-one&#34;&gt;When to use one&lt;a class=&#34;anchor&#34; href=&#34;#when-to-use-one&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; caching expensive query results, sessions, counters, leaderboards (Redis sorted sets), idempotency keys, deduplication in pipelines, lookups at very high request rates.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt; anything that needs ad hoc queries, joins, or range scans over values. If you keep adding secondary indexes by hand, you want a different database.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;common-mistakes&#34;&gt;Common mistakes&lt;a class=&#34;anchor&#34; href=&#34;#common-mistakes&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Treating a cache as the source of truth.&lt;/strong&gt; Redis with default settings can lose recent writes on a crash. Keep the real data in a durable database.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hot keys.&lt;/strong&gt; One key (a global counter, a celebrity&amp;rsquo;s profile) receives most traffic and overloads a single node or DynamoDB partition. Spread it (&lt;code&gt;counter:{shard}&lt;/code&gt;) or cache locally.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Huge values.&lt;/strong&gt; Multi-megabyte values block single-threaded Redis and waste network. Store large blobs in object storage and keep a pointer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No TTL on cache keys,&lt;/strong&gt; so memory fills up and eviction starts dropping keys you needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;learning-resources&#34;&gt;Learning Resources&lt;a class=&#34;anchor&#34; href=&#34;#learning-resources&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://redis.io/docs/latest/&#34;&gt;Redis documentation&lt;/a&gt; and &lt;a href=&#34;https://redis.io/university/&#34;&gt;Redis University&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://valkey.io/docs/&#34;&gt;Valkey documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html&#34;&gt;Amazon DynamoDB Developer Guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;The DynamoDB Book&lt;/em&gt;, Alex DeBrie: single-table design and access-pattern modeling&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf&#34;&gt;Dynamo: Amazon&amp;rsquo;s Highly Available Key-value Store&lt;/a&gt; (2007)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.usenix.org/conference/atc22/presentation/elhemali&#34;&gt;Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service&lt;/a&gt; (USENIX ATC 2022)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Time Series</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/time-series/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/time-series/</guid>
				<description>&lt;h1 id=&#34;time-series-databases&#34;&gt;Time-Series Databases&lt;a class=&#34;anchor&#34; href=&#34;#time-series-databases&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;time-series database (TSDB)&lt;/strong&gt; stores measurements indexed by time: CPU usage every 15 seconds, the temperature of a sensor every minute, a stock price on every trade. Each point is a &lt;strong&gt;timestamp&lt;/strong&gt;, a &lt;strong&gt;value&lt;/strong&gt;, and a set of &lt;strong&gt;labels&lt;/strong&gt; (tags) that identify the series, such as &lt;code&gt;host=web-1, region=eu&lt;/code&gt;. Writes are almost always appends of recent data, and queries ask for ranges and aggregates (&amp;ldquo;average latency per 5 minutes over the last day&amp;rdquo;), so TSDBs optimize for exactly that.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vector</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/vector/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/vector/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ SELECT name FROM products ORDER BY embedding &amp;lt;=&amp;gt; :query LIMIT 3;&lt;/div&gt;&#xA;&lt;h1 id=&#34;vector-databases&#34;&gt;Vector Databases&lt;a class=&#34;anchor&#34; href=&#34;#vector-databases&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;vector database&lt;/strong&gt; stores &lt;strong&gt;embeddings&lt;/strong&gt;, lists of numbers (typically 384 to 3,072 of them) that a machine-learning model produces for a piece of text, an image or a product, and answers one question fast: &lt;strong&gt;which stored vectors are closest to this one?&lt;/strong&gt; Items with similar meaning end up close together, so &amp;ldquo;closest vectors&amp;rdquo; means &amp;ldquo;most similar items&amp;rdquo;. This powers semantic search, recommendations, deduplication and &lt;strong&gt;retrieval-augmented generation (RAG)&lt;/strong&gt;, where an LLM is given the most relevant document chunks before it answers.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Graph</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/graph/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/graph/</guid>
				<description>&lt;h1 id=&#34;graph-databases&#34;&gt;Graph Databases&lt;a class=&#34;anchor&#34; href=&#34;#graph-databases&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;graph database&lt;/strong&gt; stores data as &lt;strong&gt;nodes&lt;/strong&gt; (people, accounts, products) and &lt;strong&gt;relationships&lt;/strong&gt; between them (&lt;code&gt;FOLLOWS&lt;/code&gt;, &lt;code&gt;PAID&lt;/code&gt;, &lt;code&gt;BOUGHT&lt;/code&gt;), and both can carry properties. Its strength is queries that walk many hops: &amp;ldquo;friends of friends who bought this&amp;rdquo;, &amp;ldquo;accounts within 4 transfers of a known fraudster&amp;rdquo;, &amp;ldquo;which services break if this one goes down&amp;rdquo;. In a relational database each hop is another join; in a native graph database each node points directly at its neighbours, so a hop costs roughly the same no matter how big the whole graph is.&lt;/p&gt;</description>
			</item>
			<item>
				<title>NewSQL</title>
				<link>https://wiki.databurst.tech/docs/roadmap/databases/nosql/newsql/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/databases/nosql/newsql/</guid>
				<description>&lt;h1 id=&#34;newsql-distributed-sql&#34;&gt;NewSQL (Distributed SQL)&lt;a class=&#34;anchor&#34; href=&#34;#newsql-distributed-sql&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;NewSQL&lt;/strong&gt;, now usually called &lt;strong&gt;distributed SQL&lt;/strong&gt;, describes relational databases that keep SQL and ACID transactions but spread data across many machines like NoSQL systems do. You talk to it like PostgreSQL or MySQL, while underneath the tables are split into ranges, every range is replicated with a consensus protocol (Paxos or Raft), and a node or even a whole datacenter can fail without losing committed data. The trade-off is latency: a write must reach a majority of replicas before it commits.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Avro</title>
				<link>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/serialization/avro/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/serialization/avro/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ avro-tools getschema orders.avro&lt;/div&gt;&#xA;&lt;h1 id=&#34;avro&#34;&gt;Avro&lt;a class=&#34;anchor&#34; href=&#34;#avro&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Apache Avro&lt;/strong&gt; is a binary serialization format whose schema is written in JSON. A record is encoded as just its values, in schema order, with no field names or tags, so Avro data is very compact. The catch: you can only decode the bytes if you know the exact schema they were written with. Avro&amp;rsquo;s key feature is what it does with that: it &lt;strong&gt;resolves the writer&amp;rsquo;s schema against the reader&amp;rsquo;s schema&lt;/strong&gt;, so old and new versions of a producer and consumer can keep talking.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CSV</title>
				<link>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/csv/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/csv/</guid>
				<description>&lt;h1 id=&#34;csv&#34;&gt;CSV&lt;a class=&#34;anchor&#34; href=&#34;#csv&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;CSV (comma-separated values)&lt;/strong&gt; is a plain-text format for tables: one record per line, fields separated by a delimiter (usually a comma), and an optional header row with column names. Every spreadsheet, database and programming language can read and write it, which is why it is still the most common way to hand data from one system to another.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csv&#34; data-lang=&#34;csv&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;order_id&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;city&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;amount&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;created_at&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;&#xA;&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:#0a3069&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;Tehran&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;250&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;2026-11-01T10:15:00Z&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;&#xA;&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:#0a3069&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;Shiraz&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;120&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;2026-11-01T10:17:42Z&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;&#xA;&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:#0a3069&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;Tehran, Iran&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;450&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;2026-11-01T10:20:05Z&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;a class=&#34;anchor&#34; href=&#34;#how-it-works&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is no single CSV standard, but &lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc4180&#34;&gt;RFC 4180&lt;/a&gt; describes what most tools agree on:&lt;/p&gt;</description>
			</item>
			<item>
				<title>DNS</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/protocols/dns/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/protocols/dns/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ dig www.example.com   # RFC 1034 / 1035, 1987&lt;/div&gt;&#xA;&lt;h1 id=&#34;dns&#34;&gt;DNS&lt;a class=&#34;anchor&#34; href=&#34;#dns&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Domain Name System&lt;/strong&gt; is the internet&amp;rsquo;s phone book: it turns a name like &lt;code&gt;www.example.com&lt;/code&gt; into an IP address like &lt;code&gt;203.0.113.10&lt;/code&gt;. It is not one database but a &lt;strong&gt;distributed hierarchy&lt;/strong&gt;: the root servers know who runs &lt;code&gt;.com&lt;/code&gt;, the &lt;code&gt;.com&lt;/code&gt; servers know who runs &lt;code&gt;example.com&lt;/code&gt;, and that domain&amp;rsquo;s own servers hold its records. Answers are cached everywhere along the way for a time set by the record&amp;rsquo;s &lt;strong&gt;TTL&lt;/strong&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Firewalls</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/concepts/firewalls/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/concepts/firewalls/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ sudo nft list ruleset&lt;/div&gt;&#xA;&lt;h1 id=&#34;firewalls&#34;&gt;Firewalls&lt;a class=&#34;anchor&#34; href=&#34;#firewalls&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;firewall&lt;/strong&gt; checks each network packet or connection against a list of rules and decides to &lt;strong&gt;allow&lt;/strong&gt; it or &lt;strong&gt;drop&lt;/strong&gt; it. Rules match on things like source and destination IP, port, protocol and, in a &lt;strong&gt;stateful&lt;/strong&gt; firewall, whether the packet belongs to a connection that was already allowed. Firewalls run on a single host (Linux &lt;code&gt;nftables&lt;/code&gt;, Windows Defender Firewall), at the network edge (appliances from Palo Alto, Fortinet, Cisco), and in the cloud as &lt;strong&gt;security groups&lt;/strong&gt; and network ACLs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>HTTP</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/protocols/http/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/protocols/http/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ curl -i https://api.shop.com/orders/42   # RFC 9110&lt;/div&gt;&#xA;&lt;h1 id=&#34;http&#34;&gt;HTTP&lt;a class=&#34;anchor&#34; href=&#34;#http&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;HTTP&lt;/strong&gt; (Hypertext Transfer Protocol) is a request/response protocol: a client sends a &lt;strong&gt;request&lt;/strong&gt; naming a method and a resource, and the server sends back one &lt;strong&gt;response&lt;/strong&gt; with a status code, headers and an optional body. It started as the protocol for web pages and is now the default for APIs, object storage (every S3 &lt;code&gt;GET&lt;/code&gt; and &lt;code&gt;PUT&lt;/code&gt; is an HTTP call), webhooks and most SaaS data sources your pipelines pull from.&lt;/p&gt;</description>
			</item>
			<item>
				<title>HTTPS</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/protocols/https/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/protocols/https/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ openssl s_client -connect shop.com:443   # RFC 8446 (TLS 1.3)&lt;/div&gt;&#xA;&lt;h1 id=&#34;https&#34;&gt;HTTPS&lt;a class=&#34;anchor&#34; href=&#34;#https&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;HTTPS&lt;/strong&gt; is plain HTTP sent inside a &lt;strong&gt;TLS&lt;/strong&gt; (Transport Layer Security) connection, usually on port 443. TLS gives three guarantees: &lt;strong&gt;confidentiality&lt;/strong&gt; (nobody on the path can read the data), &lt;strong&gt;integrity&lt;/strong&gt; (nobody can change it unnoticed) and &lt;strong&gt;authentication&lt;/strong&gt; (you are really talking to &lt;code&gt;shop.com&lt;/code&gt;, proven by a certificate). &amp;ldquo;SSL&amp;rdquo; is the name of TLS&amp;rsquo;s long-dead predecessor; every SSL version and TLS 1.0 and 1.1 are deprecated. Use TLS 1.3, with 1.2 as a fallback.&lt;/p&gt;</description>
			</item>
			<item>
				<title>JSON</title>
				<link>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/json/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/json/</guid>
				<description>&lt;h1 id=&#34;json&#34;&gt;JSON&lt;a class=&#34;anchor&#34; href=&#34;#json&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;JSON (JavaScript Object Notation)&lt;/strong&gt; is a text format for structured data built from two shapes: &lt;strong&gt;objects&lt;/strong&gt; (&lt;code&gt;{&amp;quot;key&amp;quot;: value}&lt;/code&gt;) and &lt;strong&gt;arrays&lt;/strong&gt; (&lt;code&gt;[v1, v2]&lt;/code&gt;), with strings, numbers, &lt;code&gt;true&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt; and &lt;code&gt;null&lt;/code&gt; as values. It is defined by &lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc8259&#34;&gt;RFC 8259&lt;/a&gt;, it&amp;rsquo;s what nearly every REST API returns, and it&amp;rsquo;s the usual shape of application logs and webhook events.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;order_id&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;7&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;42&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;Ali&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;Tehran&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;items&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#1f2328&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;sku&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;TEA-01&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;qty&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;price&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;3.5&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#1f2328&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;sku&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;CUP-07&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;qty&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;price&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;12.0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#1f2328&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;paid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0550ae&#34;&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;2026-11-16T09:30:00Z&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;how-it-differs-from-csv&#34;&gt;How it differs from CSV&lt;a class=&#34;anchor&#34; href=&#34;#how-it-differs-from-csv&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;JSON is &lt;strong&gt;nested&lt;/strong&gt; and &lt;strong&gt;self-describing&lt;/strong&gt;: every record carries its own field names, and a field can hold another object or a list. That makes it a natural fit for events whose shape varies, and an awkward fit for tables, because an order with three items does not map to one row.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kappa</title>
				<link>https://wiki.databurst.tech/docs/roadmap/data-architecture/kappa/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/data-architecture/kappa/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ ./kappa --replay-from earliest&lt;/div&gt;&#xA;&lt;h1 id=&#34;kappa-architecture&#34;&gt;Kappa Architecture&lt;a class=&#34;anchor&#34; href=&#34;#kappa-architecture&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Kappa architecture&lt;/strong&gt; handles both real-time and historical processing with &lt;strong&gt;a single stream processing pipeline&lt;/strong&gt;. All events are kept in a durable, replayable log (usually Apache Kafka). The streaming job reads the log and maintains the output tables continuously. When logic changes, you do not run a separate batch job: you start a new version of the streaming job that &lt;strong&gt;replays the log from the beginning&lt;/strong&gt;, let it catch up, and switch readers over. Jay Kreps proposed it in 2014 as a simpler alternative to &lt;a href=&#34;https://wiki.databurst.tech/docs/roadmap/data-architecture/lambda/&#34;&gt;Lambda&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lambda</title>
				<link>https://wiki.databurst.tech/docs/roadmap/data-architecture/lambda/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/data-architecture/lambda/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ ./lambda --batch spark --speed flink&lt;/div&gt;&#xA;&lt;h1 id=&#34;lambda-architecture&#34;&gt;Lambda Architecture&lt;a class=&#34;anchor&#34; href=&#34;#lambda-architecture&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Lambda architecture&lt;/strong&gt; processes the same events along two paths: a &lt;strong&gt;batch layer&lt;/strong&gt; that periodically recomputes accurate results from all historical data, and a &lt;strong&gt;speed layer&lt;/strong&gt; that processes new events in real time to cover the gap since the last batch run. A &lt;strong&gt;serving layer&lt;/strong&gt; merges both so queries get answers that are complete and fresh. Nathan Marz described it around 2011, when stream processors were not yet reliable enough to be the only source of truth.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Parquet</title>
				<link>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/parquet/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/parquet/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ parquet-tools inspect orders.parquet&lt;/div&gt;&#xA;&lt;h1 id=&#34;parquet&#34;&gt;Parquet&lt;a class=&#34;anchor&#34; href=&#34;#parquet&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Apache Parquet&lt;/strong&gt; is an open, &lt;strong&gt;columnar&lt;/strong&gt; file format. It&amp;rsquo;s the default storage format of the modern data stack: Spark, Trino, DuckDB, ClickHouse, Snowflake and BigQuery all read it, and lakehouse table formats (&lt;strong&gt;Iceberg&lt;/strong&gt;, &lt;strong&gt;Delta Lake&lt;/strong&gt;, &lt;strong&gt;Hudi&lt;/strong&gt;) are, underneath, folders of Parquet files plus metadata.&lt;/p&gt;&#xA;&lt;p&gt;Two ideas make it fast: &lt;strong&gt;store columns, not rows&lt;/strong&gt;, and &lt;strong&gt;write statistics so readers can skip data&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;idea-1-store-columns-not-rows&#34;&gt;Idea 1: store columns, not rows&lt;a class=&#34;anchor&#34; href=&#34;#idea-1-store-columns-not-rows&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure class=&#34;lx-fig&#34; data-hook=&#34;rowcol&#34; tabindex=&#34;0&#34;&gt;&#xA;  &lt;header class=&#34;lx-head&#34;&gt;&#xA;    &lt;div class=&#34;lx-kicker&#34;&gt;$ SELECT SUM(amount) FROM orders&lt;/div&gt;&#xA;    &lt;div class=&#34;lx-title&#34;&gt;Same table, two layouts on disk&lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;  &lt;div class=&#34;lx-body&#34;&gt;&#xA;&lt;div class=&#34;rc-top&#34;&gt;&#xA;&lt;table class=&#34;rc-tbl&#34;&gt;&lt;tr&gt;&lt;th&gt;id&lt;/th&gt;&lt;th&gt;user&lt;/th&gt;&lt;th&gt;city&lt;/th&gt;&lt;th class=&#34;hot&#34;&gt;amount&lt;/th&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;ali&lt;/td&gt;&lt;td&gt;TEH&lt;/td&gt;&lt;td&gt;250&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;sara&lt;/td&gt;&lt;td&gt;TEH&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;reza&lt;/td&gt;&lt;td&gt;TEH&lt;/td&gt;&lt;td&gt;450&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;mina&lt;/td&gt;&lt;td&gt;SHZ&lt;/td&gt;&lt;td&gt;980&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;omid&lt;/td&gt;&lt;td&gt;SHZ&lt;/td&gt;&lt;td&gt;600&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;nika&lt;/td&gt;&lt;td&gt;ISF&lt;/td&gt;&lt;td&gt;1200&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;div&gt;&#xA;&lt;div class=&#34;rc-q&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt; &lt;span class=&#34;fn&#34;&gt;SUM&lt;/span&gt;(amount)&#xA;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;   orders;&lt;/div&gt;&#xA;&lt;div class=&#34;rc-legend&#34;&gt;&lt;span&gt;&lt;i style=&#34;background:var(--acc-l);border-color:var(--acc-m)&#34;&gt;&lt;/i&gt;amount (needed)&lt;/span&gt;&lt;span&gt;&lt;i style=&#34;background:var(--panel)&#34;&gt;&lt;/i&gt;other columns&lt;/span&gt;&lt;span&gt;&lt;i style=&#34;background:var(--acc)&#34;&gt;&lt;/i&gt;read from disk&lt;/span&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;rc-disk&#34;&gt;&lt;div class=&#34;lb&#34;&gt;Row layout · CSV, PostgreSQL heap &lt;span class=&#34;rc-read row&#34;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;rc-strip row&#34;&gt;&lt;/div&gt;&lt;div class=&#34;rc-meter row&#34;&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;rc-disk&#34;&gt;&lt;div class=&#34;lb&#34;&gt;Columnar layout · Parquet, ORC &lt;span class=&#34;rc-read col&#34;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;rc-strip col&#34;&gt;&lt;/div&gt;&lt;div class=&#34;rc-meter col&#34;&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol class=&#34;lx-caps&#34;&gt;&#xA;  &lt;li&gt;6 orders, 4 columns. The query needs only &lt;b&gt;one&lt;/b&gt; column: &lt;b&gt;amount&lt;/b&gt;.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;b&gt;Row layout:&lt;/b&gt; each row&#39;s values sit next to each other on disk. Great for &#34;fetch order #4&#34;, the OLTP case.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;b&gt;Columnar layout:&lt;/b&gt; all ids, then all users, then all cities, then all amounts.&lt;/li&gt;&#xA;  &lt;li&gt;The row store must read &lt;b&gt;everything&lt;/b&gt;: amounts are interleaved with columns we don&#39;t need.&lt;/li&gt;&#xA;  &lt;li&gt;The column store reads &lt;b&gt;only the amount block&lt;/b&gt;: 4× less I/O here. A real table with 200 columns? Often &lt;b&gt;50–100×&lt;/b&gt;.&lt;/li&gt;&#xA;  &lt;li&gt;Similar values now sit together, so they compress: &lt;b&gt;run-length encoding&lt;/b&gt; turns TEH,TEH,TEH into TEH×3. Add dictionary encoding + zstd and files shrink 5–10× vs CSV.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;lx-details&#34;&gt;&lt;div class=&#34;lx-stepno&#34;&gt;&lt;/div&gt;&lt;div class=&#34;lx-cap&#34;&gt;&lt;/div&gt;&lt;/div&gt;&#xA;  &lt;footer class=&#34;lx-ctl&#34;&gt;&#xA;    &lt;div class=&#34;lx-prog&#34;&gt;&lt;/div&gt;&#xA;    &lt;div class=&#34;lx-btns&#34;&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;speed&#34; aria-label=&#34;Playback speed&#34;&gt;1×&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;prev&#34; aria-label=&#34;Previous step&#34;&gt;‹&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b solid&#34; data-do=&#34;play&#34;&gt;▶ Play&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;next&#34;&gt;Step&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;reset&#34; aria-label=&#34;Restart&#34;&gt;↺&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/footer&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;idea-2-statistics-let-you-skip-data&#34;&gt;Idea 2: statistics let you skip data&lt;a class=&#34;anchor&#34; href=&#34;#idea-2-statistics-let-you-skip-data&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A Parquet file isn&amp;rsquo;t one big blob. Rows are cut into &lt;strong&gt;row groups&lt;/strong&gt; (typically ~128 MB). Inside each row group, every column is a &lt;strong&gt;column chunk&lt;/strong&gt;, split into &lt;strong&gt;pages&lt;/strong&gt;. The &lt;strong&gt;footer&lt;/strong&gt; stores the schema plus &lt;strong&gt;min / max / null-count&lt;/strong&gt; for every column chunk.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Protocol Buffers</title>
				<link>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/serialization/protobuf/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/serialization/protobuf/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ protoc --python_out=. order.proto&lt;/div&gt;&#xA;&lt;h1 id=&#34;protocol-buffers&#34;&gt;Protocol Buffers&lt;a class=&#34;anchor&#34; href=&#34;#protocol-buffers&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Protocol Buffers (Protobuf)&lt;/strong&gt; is Google&amp;rsquo;s language-neutral binary serialization format. You describe messages in a &lt;code&gt;.proto&lt;/code&gt; file, a compiler (&lt;code&gt;protoc&lt;/code&gt; or &lt;code&gt;buf&lt;/code&gt;) generates classes for Go, Java, Python, Rust and a dozen other languages, and those classes encode objects into compact bytes. Each field is identified on the wire by a &lt;strong&gt;field number&lt;/strong&gt;, not by its name, which is what lets services upgrade one at a time. Protobuf is the payload format of &lt;strong&gt;gRPC&lt;/strong&gt; and is common on Kafka topics alongside Avro.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SSH</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/protocols/ssh/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/protocols/ssh/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ ssh deploy@db1.internal   # RFC 4251–4254&lt;/div&gt;&#xA;&lt;h1 id=&#34;ssh&#34;&gt;SSH&lt;a class=&#34;anchor&#34; href=&#34;#ssh&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;SSH&lt;/strong&gt; (Secure Shell) gives you an encrypted, authenticated connection to a remote machine over an untrusted network, usually on TCP port 22. You use it to get a shell on a server, run a remote command, copy files (&lt;code&gt;scp&lt;/code&gt;, &lt;code&gt;sftp&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt;), and &lt;strong&gt;tunnel&lt;/strong&gt; other traffic, such as a PostgreSQL connection to a database that only accepts traffic from inside a private network. OpenSSH is the implementation on almost every Linux and macOS machine, and it ships with Windows.&lt;/p&gt;</description>
			</item>
			<item>
				<title>UDP</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/protocols/udp/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/protocols/udp/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ man 7 udp   # RFC 768, 1980&lt;/div&gt;&#xA;&lt;h1 id=&#34;udp&#34;&gt;UDP&lt;a class=&#34;anchor&#34; href=&#34;#udp&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;UDP&lt;/strong&gt; (User Datagram Protocol) sends independent messages, called &lt;strong&gt;datagrams&lt;/strong&gt;, from one port to another with no connection, no acknowledgments, no retransmission and no ordering. Each datagram either arrives whole or not at all. That makes UDP fast and simple, and it leaves reliability to the application, if the application wants it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tcp-and-udp-under-the-same-packet-loss&#34;&gt;TCP and UDP under the same packet loss&lt;a class=&#34;anchor&#34; href=&#34;#tcp-and-udp-under-the-same-packet-loss&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure class=&#34;lx-fig&#34;  tabindex=&#34;0&#34;&gt;&#xA;  &lt;header class=&#34;lx-head&#34;&gt;&#xA;    &lt;div class=&#34;lx-kicker&#34;&gt;$ send 3 messages, 1 gets lost&lt;/div&gt;&#xA;    &lt;div class=&#34;lx-title&#34;&gt;TCP and UDP, same network, same loss&lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;  &lt;div class=&#34;lx-body&#34;&gt;&#xA;&lt;svg class=&#34;lx-svg lx-canvas&#34; viewBox=&#34;0 0 760 398&#34;&gt;&#xA;&lt;defs&gt;&#xA;&lt;marker id=&#34;udp-a&#34; viewBox=&#34;0 0 10 10&#34; refX=&#34;9&#34; refY=&#34;5&#34; markerWidth=&#34;7&#34; markerHeight=&#34;7&#34; orient=&#34;auto-start-reverse&#34;&gt;&lt;path d=&#34;M0 0L10 5L0 10z&#34; fill=&#34;#531A8A&#34;/&gt;&lt;/marker&gt;&#xA;&lt;marker id=&#34;udp-r&#34; viewBox=&#34;0 0 10 10&#34; refX=&#34;9&#34; refY=&#34;5&#34; markerWidth=&#34;7&#34; markerHeight=&#34;7&#34; orient=&#34;auto-start-reverse&#34;&gt;&lt;path d=&#34;M0 0L10 5L0 10z&#34; fill=&#34;#C2382F&#34;/&gt;&lt;/marker&gt;&#xA;&lt;/defs&gt;&#xA;&lt;line x1=&#34;380&#34; y1=&#34;10&#34; x2=&#34;380&#34; y2=&#34;400&#34; stroke=&#34;#E7E7EF&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;&lt;line x1=&#34;75&#34; y1=&#34;62&#34; x2=&#34;75&#34; y2=&#34;390&#34; stroke=&#34;#DCDAE6&#34; stroke-width=&#34;1.2&#34; stroke-dasharray=&#34;2 5&#34;/&gt;&#xA;&lt;rect x=&#34;7&#34; y=&#34;14&#34; width=&#34;136&#34; height=&#34;46&#34; rx=&#34;6&#34; fill=&#34;#fff&#34; stroke=&#34;#3D3A49&#34; stroke-width=&#34;1.4&#34;/&gt;&#xA;&lt;text x=&#34;75&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;12&#34; font-weight=&#34;600&#34; fill=&#34;#17151F&#34;&gt;TCP CLIENT&lt;/text&gt;&#xA;&lt;line x1=&#34;305&#34; y1=&#34;62&#34; x2=&#34;305&#34; y2=&#34;390&#34; stroke=&#34;#DCDAE6&#34; stroke-width=&#34;1.2&#34; stroke-dasharray=&#34;2 5&#34;/&gt;&#xA;&lt;rect x=&#34;237&#34; y=&#34;14&#34; width=&#34;136&#34; height=&#34;46&#34; rx=&#34;6&#34; fill=&#34;#fff&#34; stroke=&#34;#3D3A49&#34; stroke-width=&#34;1.4&#34;/&gt;&#xA;&lt;text x=&#34;305&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;12&#34; font-weight=&#34;600&#34; fill=&#34;#17151F&#34;&gt;TCP SERVER&lt;/text&gt;&#xA;&lt;line x1=&#34;455&#34; y1=&#34;62&#34; x2=&#34;455&#34; y2=&#34;390&#34; stroke=&#34;#DCDAE6&#34; stroke-width=&#34;1.2&#34; stroke-dasharray=&#34;2 5&#34;/&gt;&#xA;&lt;rect x=&#34;387&#34; y=&#34;14&#34; width=&#34;136&#34; height=&#34;46&#34; rx=&#34;6&#34; fill=&#34;#fff&#34; stroke=&#34;#3D3A49&#34; stroke-width=&#34;1.4&#34;/&gt;&#xA;&lt;text x=&#34;455&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;12&#34; font-weight=&#34;600&#34; fill=&#34;#17151F&#34;&gt;UDP CLIENT&lt;/text&gt;&#xA;&lt;line x1=&#34;685&#34; y1=&#34;62&#34; x2=&#34;685&#34; y2=&#34;390&#34; stroke=&#34;#DCDAE6&#34; stroke-width=&#34;1.2&#34; stroke-dasharray=&#34;2 5&#34;/&gt;&#xA;&lt;rect x=&#34;617&#34; y=&#34;14&#34; width=&#34;136&#34; height=&#34;46&#34; rx=&#34;6&#34; fill=&#34;#fff&#34; stroke=&#34;#3D3A49&#34; stroke-width=&#34;1.4&#34;/&gt;&#xA;&lt;text x=&#34;685&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;12&#34; font-weight=&#34;600&#34; fill=&#34;#17151F&#34;&gt;UDP SERVER&lt;/text&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;1&#34;&gt;&lt;line x1=&#34;79&#34; y1=&#34;99&#34; x2=&#34;301&#34; y2=&#34;99&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;92&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;SYN&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;1&#34;&gt;&lt;line x1=&#34;301&#34; y1=&#34;133&#34; x2=&#34;79&#34; y2=&#34;133&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; stroke-dasharray=&#34;5 4&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;126&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;SYN-ACK&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;1&#34;&gt;&lt;line x1=&#34;79&#34; y1=&#34;167&#34; x2=&#34;301&#34; y2=&#34;167&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;160&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;ACK&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;1&#34;&gt;&lt;line x1=&#34;459&#34; y1=&#34;99&#34; x2=&#34;681&#34; y2=&#34;99&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;570&#34; y=&#34;92&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;datagram #1&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;1&#34;&gt;&lt;line x1=&#34;459&#34; y1=&#34;133&#34; x2=&#34;570&#34; y2=&#34;133&#34; stroke=&#34;#C2382F&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-r)&#34;/&gt;&lt;text x=&#34;580&#34; y=&#34;138&#34; text-anchor=&#34;middle&#34; font-size=&#34;15&#34; font-weight=&#34;700&#34; fill=&#34;#C2382F&#34;&gt;✕&lt;/text&gt;&lt;text x=&#34;522&#34; y=&#34;126&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#C2382F&#34;&gt;datagram #2&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;1&#34;&gt;&lt;line x1=&#34;459&#34; y1=&#34;167&#34; x2=&#34;681&#34; y2=&#34;167&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;570&#34; y=&#34;160&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;datagram #3&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;2&#34;&gt;&lt;rect x=&#34;390&#34; y=&#34;186&#34; width=&#34;130&#34; height=&#34;22&#34; rx=&#34;5&#34; fill=&#34;#F4EEFA&#34; stroke=&#34;#DCC9EE&#34;/&gt;&lt;text x=&#34;455&#34; y=&#34;201&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;done, no waiting&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;2&#34;&gt;&lt;rect x=&#34;641&#34; y=&#34;220&#34; width=&#34;88&#34; height=&#34;22&#34; rx=&#34;5&#34; fill=&#34;#F4EEFA&#34; stroke=&#34;#DCC9EE&#34;/&gt;&lt;text x=&#34;685&#34; y=&#34;235&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;got #1, #3&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;3&#34;&gt;&lt;line x1=&#34;79&#34; y1=&#34;201&#34; x2=&#34;301&#34; y2=&#34;201&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;194&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;seg 1&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;3&#34;&gt;&lt;line x1=&#34;79&#34; y1=&#34;235&#34; x2=&#34;190&#34; y2=&#34;235&#34; stroke=&#34;#C2382F&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-r)&#34;/&gt;&lt;text x=&#34;200&#34; y=&#34;240&#34; text-anchor=&#34;middle&#34; font-size=&#34;15&#34; font-weight=&#34;700&#34; fill=&#34;#C2382F&#34;&gt;✕&lt;/text&gt;&lt;text x=&#34;142&#34; y=&#34;228&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#C2382F&#34;&gt;seg 2&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;3&#34;&gt;&lt;line x1=&#34;79&#34; y1=&#34;269&#34; x2=&#34;301&#34; y2=&#34;269&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;262&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;seg 3&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;4&#34;&gt;&lt;line x1=&#34;301&#34; y1=&#34;303&#34; x2=&#34;79&#34; y2=&#34;303&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; stroke-dasharray=&#34;5 4&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;296&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;dup ACK: still need 2&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;4&#34;&gt;&lt;line x1=&#34;79&#34; y1=&#34;337&#34; x2=&#34;301&#34; y2=&#34;337&#34; stroke=&#34;#531A8A&#34; stroke-width=&#34;1.6&#34; marker-end=&#34;url(#udp-a)&#34;/&gt;&lt;text x=&#34;190&#34; y=&#34;330&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;retransmit seg 2&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;5&#34;&gt;&lt;rect x=&#34;240&#34; y=&#34;356&#34; width=&#34;130&#34; height=&#34;22&#34; rx=&#34;5&#34; fill=&#34;#F4EEFA&#34; stroke=&#34;#DCC9EE&#34;/&gt;&lt;text x=&#34;305&#34; y=&#34;371&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#17151F&#34;&gt;1, 2, 3 in order&lt;/text&gt;&lt;/g&gt;&#xA;&lt;g class=&#34;f&#34; data-step=&#34;5&#34;&gt;&lt;rect x=&#34;603&#34; y=&#34;254&#34; width=&#34;151&#34; height=&#34;22&#34; rx=&#34;5&#34; fill=&#34;#fff&#34; stroke=&#34;#C2382F&#34;/&gt;&lt;text x=&#34;678&#34; y=&#34;269&#34; text-anchor=&#34;middle&#34; class=&#34;m&#34; font-size=&#34;11.5&#34; fill=&#34;#C2382F&#34;&gt;#2 is gone for good&lt;/text&gt;&lt;/g&gt;&#xA;&lt;/svg&gt;&#xA;&lt;ol class=&#34;lx-caps&#34;&gt;&#xA;  &lt;li&gt;Left: TCP. Right: UDP. Each side sends three messages over the same lossy network.&lt;/li&gt;&#xA;  &lt;li&gt;TCP spends a round trip on the &lt;b&gt;handshake&lt;/b&gt; before any data. UDP just sends: three &lt;b&gt;datagrams&lt;/b&gt;, and #2 is lost.&lt;/li&gt;&#xA;  &lt;li&gt;UDP is already finished. The receiver got &lt;b&gt;#1 and #3&lt;/b&gt;. Nothing tells either side that #2 is missing.&lt;/li&gt;&#xA;  &lt;li&gt;TCP sends its three segments. Segment 2 is lost too.&lt;/li&gt;&#xA;  &lt;li&gt;The receiver &lt;b&gt;ACKs&lt;/b&gt; only what arrived in order, so the sender &lt;b&gt;retransmits&lt;/b&gt; segment 2. Segment 3 waits in a buffer meanwhile.&lt;/li&gt;&#xA;  &lt;li&gt;TCP delivers &lt;b&gt;all three, in order&lt;/b&gt;, but later. UDP delivered &lt;b&gt;two, immediately&lt;/b&gt;. Which is better depends on the app.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;  &lt;div class=&#34;lx-details&#34;&gt;&lt;div class=&#34;lx-stepno&#34;&gt;&lt;/div&gt;&lt;div class=&#34;lx-cap&#34;&gt;&lt;/div&gt;&lt;/div&gt;&#xA;  &lt;footer class=&#34;lx-ctl&#34;&gt;&#xA;    &lt;div class=&#34;lx-prog&#34;&gt;&lt;/div&gt;&#xA;    &lt;div class=&#34;lx-btns&#34;&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;speed&#34; aria-label=&#34;Playback speed&#34;&gt;1×&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;prev&#34; aria-label=&#34;Previous step&#34;&gt;‹&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b solid&#34; data-do=&#34;play&#34;&gt;▶ Play&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;next&#34;&gt;Step&lt;/button&gt;&#xA;      &lt;button class=&#34;lx-b&#34; data-do=&#34;reset&#34; aria-label=&#34;Restart&#34;&gt;↺&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/footer&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;the-whole-header-is-8-bytes&#34;&gt;The whole header is 8 bytes&lt;a class=&#34;anchor&#34; href=&#34;#the-whole-header-is-8-bytes&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Field&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Size&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Meaning&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Source port&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;16 bits&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Where replies go&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Destination port&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;16 bits&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Which program receives it (53 = DNS)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Length&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;16 bits&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Header + data, in bytes&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Checksum&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;16 bits&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Detects corruption (mandatory in IPv6)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Compare that with TCP&amp;rsquo;s 20 to 60 bytes of sequence numbers, ACKs, windows and flags. Because there is no connection, the server keeps no per-client state, which is why one DNS server can answer millions of clients.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VPN</title>
				<link>https://wiki.databurst.tech/docs/roadmap/networking/concepts/vpn/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/networking/concepts/vpn/</guid>
				<description>&lt;div class=&#34;lx-kicker-line&#34;&gt;$ wg-quick up wg0&lt;/div&gt;&#xA;&lt;h1 id=&#34;vpn&#34;&gt;VPN&lt;a class=&#34;anchor&#34; href=&#34;#vpn&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &lt;strong&gt;VPN&lt;/strong&gt; (Virtual Private Network) builds an encrypted &lt;strong&gt;tunnel&lt;/strong&gt; across an untrusted network so that a remote machine behaves as if it were plugged into a private one. Your laptop&amp;rsquo;s packets to an internal address are encrypted, wrapped in an ordinary-looking outer packet addressed to a &lt;strong&gt;VPN gateway&lt;/strong&gt;, and unwrapped there. For a data engineer, that is how you reach a warehouse, a database or an internal Airflow UI that has no public address.&lt;/p&gt;</description>
			</item>
			<item>
				<title>XML</title>
				<link>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/xml/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://wiki.databurst.tech/docs/roadmap/file-formats-and-serialization/file-formats/xml/</guid>
				<description>&lt;h1 id=&#34;xml&#34;&gt;XML&lt;a class=&#34;anchor&#34; href=&#34;#xml&#34; aria-label=&#34;Link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;XML (eXtensible Markup Language)&lt;/strong&gt; is a text format that stores data as a tree of &lt;strong&gt;elements&lt;/strong&gt; wrapped in opening and closing tags, with optional &lt;strong&gt;attributes&lt;/strong&gt; on each tag. It is a W3C standard from 1998, and although JSON replaced it for most new APIs, data engineers still meet it constantly: bank and payment messages (ISO 20022), government and tax feeds, SOAP services, RSS, Office files (&lt;code&gt;.xlsx&lt;/code&gt; and &lt;code&gt;.docx&lt;/code&gt; are zipped XML) and many legacy exports.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
