Files
basicBench/039/004.html
2026-02-24 12:28:15 +08:00

7 lines
61 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<html lang=en op=submitted><!--
Page saved with SingleFile
url: https://news.ycombinator.com/submitted?id=levkk
saved date: Tue Feb 24 2026 10:58:52 GMT+0800 (中国标准时间)
--><meta charset=utf-8><meta name=viewport content="width=device-width, initial-scale=1.0"><style>:root{--sf-img-0: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMzIgMTYiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMiAyNyAxNC0yOSAxNCAyOXoiIGZpbGw9IiM5OTkiLz48L3N2Zz4=")}</style><style>body{font-family:Verdana,Geneva,sans-serif;font-size:10pt;color:#828282}td{font-family:Verdana,Geneva,sans-serif;font-size:10pt;color:#828282}input{font-family:monospace;font-size:10pt}a:link{color:#000000;text-decoration:none}a:visited{color:#828282;text-decoration:none}.title{font-family:Verdana,Geneva,sans-serif;font-size:10pt;color:#828282;overflow:hidden}.subtext{font-family:Verdana,Geneva,sans-serif;font-size:7pt;color:#828282}.yclinks{font-family:Verdana,Geneva,sans-serif;font-size:8pt;color:#828282}.pagetop{font-family:Verdana,Geneva,sans-serif;font-size:10pt;color:#222222;line-height:12px}.comhead{font-family:Verdana,Geneva,sans-serif;font-size:8pt;color:#828282}.hnname{margin-left:1px;margin-right:5px}#hnmain{min-width:796px}.title a{word-break:break-word}.comment a:link,.comment a:visited{text-decoration:underline}.c00 a:link{color:#000000}.c5a a:link,.c5a a:visited{color:#5a5a5a}.c73 a:link,.c73 a:visited{color:#737373}.c82 a:link,.c82 a:visited{color:#828282}.c88 a:link,.c88 a:visited{color:#888888}.c9c a:link,.c9c a:visited{color:#9c9c9c}.cae a:link,.cae a:visited{color:#aeaeae}.cbe a:link,.cbe a:visited{color:#bebebe}.cce a:link,.cce a:visited{color:#cecece}.cdd a:link,.cdd a:visited{color:#dddddd}.pagetop a:visited{color:#000000}.topsel a:link,.topsel a:visited{color:#ffffff}.subtext a:link,.subtext a:visited{color:#828282}.subtext a:hover{text-decoration:underline}.comhead a:link,.subtext a:visited{color:#828282}.comhead a:hover{text-decoration:underline}.hnmore a:link,a:visited{color:#828282}pre:hover{overflow:auto}.votearrow{width:10px;height:10px;border:0px;margin:3px 2px 6px;background:var(--sf-img-0),linear-gradient(transparent,transparent) no-repeat;background-size:10px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.votearrow{background-size:10px;background-image:var(--sf-img-0),linear-gradient(transparent,transparent)}}@media only screen and (min-width:300px) and (max-width:750px){#hnmain{width:100%;min-width:0}body{padding:0;margin:0;width:100%}td{height:inherit!important}span.pagetop{display:block;margin:3px 5px;font-size:12px;line-height:normal}span.pagetop b{display:block;font-size:15px}.title{font-size:11pt;line-height:14pt}.subtext{font-size:9pt}.votearrow{transform:scale(1.3,1.3);margin-right:6px}.votelinks{min-width:18px}.votelinks a{display:block;margin-bottom:9px}input[type="text"]{font-size:16px;width:90%}}</style><meta name=robots content=noindex><title>levkk's submissions | Hacker News</title><meta name=referrer content=no-referrer><link rel=icon href=data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE4IiB2aWV3Qm94PSI0IDQgMTg4IDE4OCIgd2lkdGg9IjE4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im00IDRoMTg4djE4OGgtMTg4eiIgZmlsbD0iI2Y2MCIvPjxwYXRoIGQ9Im03My4yNTIxNzU2IDQ1LjAxIDIyLjc0NzgyNDQgNDcuMzkxMzAwODMgMjIuNzQ3ODI0NC00Ny4zOTEzMDA4M2gxOS41NjU2OTYzMWwtMzQuMzIzNTIwNzEgNjQuNDg2NjE0Njh2NDEuNDkzMzg1MzJoLTE1Ljk4di00MS40OTMzODUzMmwtMzQuMzIzNTIwNzEtNjQuNDg2NjE0Njh6IiBmaWxsPSIjZmZmIi8+PC9zdmc+><link rel=canonical href="https://news.ycombinator.com/submitted?id=levkk"><meta http-equiv=content-security-policy content="default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;"><body><center><table id=hnmain border=0 cellpadding=0 cellspacing=0 width=85% bgcolor=#f6f6ef><tbody><tr><td bgcolor=#ff6600><table border=0 cellpadding=0 cellspacing=0 width=100% style=padding:2px><tbody><tr><td style=width:18px;padding-right:4px><a href=https://news.ycombinator.com/><img src=data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE4IiB2aWV3Qm94PSI0IDQgMTg4IDE4OCIgd2lkdGg9IjE4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im00IDRoMTg4djE4OGgtMTg4eiIgZmlsbD0iI2Y2MCIvPjxwYXRoIGQ9Im03My4yNTIxNzU2IDQ1LjAxIDIyLjc0NzgyNDQgNDcuMzkxMzAwODMgMjIuNzQ3ODI0NC00Ny4zOTEzMDA4M2gxOS41NjU2OTYzMWwtMzQuMzIzNTIwNzEgNjQuNDg2NjE0Njh2NDEuNDkzMzg1MzJoLTE1Ljk4di00MS40OTMzODUzMmwtMzQuMzIzNTIwNzEtNjQuNDg2NjE0Njh6IiBmaWxsPSIjZmZmIi8+PC9zdmc+ width=18 height=18 style="border:1px white solid;display:block"></a><td style=line-height:12pt;height:10px><span class=pagetop><b class=hnname><a href=https://news.ycombinator.com/news>Hacker News</a></b><a href=https://news.ycombinator.com/newswelcome.html>welcome</a> | <a href=https://news.ycombinator.com/newest>new</a> | <a href="https://news.ycombinator.com/threads?id=cdostan">threads</a> | <a href=https://news.ycombinator.com/front>past</a> | <a href=https://news.ycombinator.com/newcomments>comments</a> | <a href=https://news.ycombinator.com/ask>ask</a> | <a href=https://news.ycombinator.com/show>show</a> | <a href=https://news.ycombinator.com/jobs>jobs</a> | <a href=https://news.ycombinator.com/submit rel=nofollow>submit</a> | <font color=#FFFFFF>levkk's submissions</font></span><td style=text-align:right;padding-right:4px><span class=pagetop><a id=me href="https://news.ycombinator.com/user?id=cdostan">cdostan</a> (<span id=karma>1</span>) | <a id=logout rel=nofollow href="https://news.ycombinator.com/logout?auth=025505045d1988297412d0a373394a79fe9ed9d7&amp;goto=submitted%3Fid%3Dlevkk">logout</a></span></table><tr style=height:10px><tr id=bigbox><td><table border=0 cellpadding=0 cellspacing=0><tbody><tr class="athing submission" id=47123631><td align=right valign=top class=title><span class=rank>1.</span><td valign=top class=votelinks><center><a id=up_47123631 class=clicky href="https://news.ycombinator.com/vote?id=47123631&amp;how=up&amp;auth=a2f89e05f461243c844581bea87ad21be82011e1&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://github.com/pgdogdev/pgdog>Show HN: PgDog Scale Postgres without changing the app</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=github.com/pgdogdev"><span class=sitestr>github.com/pgdogdev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_47123631>196 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2026-02-23T15:33:24 1771860804"><a href="https://news.ycombinator.com/item?id=47123631">11 hours ago</a></span> <span id=unv_47123631></span> | <a href="https://hn.algolia.com/?query=Show%20HN%3A%20PgDog%20%E2%80%93%20Scale%20Postgres%20without%20changing%20the%20app&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=47123631">45&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=47048265><td align=right valign=top class=title><span class=rank>2.</span><td valign=top class=votelinks><center><a id=up_47048265 class=clicky href="https://news.ycombinator.com/vote?id=47048265&amp;how=up&amp;auth=2e6ca2610627ffc7b0f03ec0190c7785edbfdefe&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href="https://news.ycombinator.com/item?id=47048265">PgDog: Connection pooler, load balancer and sharder for PostgreSQL</a></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_47048265>1 point</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2026-02-17T15:05:55 1771340755"><a href="https://news.ycombinator.com/item?id=47048265">6 days ago</a></span> <span id=unv_47048265></span> | <a href="https://hn.algolia.com/?query=PgDog%3A%20Connection%20pooler%2C%20load%20balancer%20and%20sharder%20for%20PostgreSQL&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=47048265">discuss</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=46035004><td align=right valign=top class=title><span class=rank>3.</span><td valign=top class=votelinks><center><a id=up_46035004 class=clicky href="https://news.ycombinator.com/vote?id=46035004&amp;how=up&amp;auth=6930713bf37114263d5a9dfaaba8f1419374867a&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/shard-your-database>Shard Your Database</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_46035004>1 point</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-11-24T15:16:53 1763997413"><a href="https://news.ycombinator.com/item?id=46035004">3 months ago</a></span> <span id=unv_46035004></span> | <a href="https://hn.algolia.com/?query=Shard%20Your%20Database&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45981116><td align=right valign=top class=title><span class=rank>4.</span><td valign=top class=votelinks><center><a id=up_45981116 class=clicky href="https://news.ycombinator.com/vote?id=45981116&amp;how=up&amp;auth=171f0812b4865ce497e7204099ffc52b9efa0e5e&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/shard-your-database>Shard Your Database</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45981116>3 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-11-19T15:55:43 1763567743"><a href="https://news.ycombinator.com/item?id=45981116">3 months ago</a></span> <span id=unv_45981116></span> | <a href="https://hn.algolia.com/?query=Shard%20Your%20Database&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45968951><td align=right valign=top class=title><span class=rank>5.</span><td valign=top class=votelinks><center><a id=up_45968951 class=clicky href="https://news.ycombinator.com/vote?id=45968951&amp;how=up&amp;auth=81a53dff6f9a9af4d275d87dc22fd616700a6147&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/shard-your-database>Shard Your Database</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45968951>1 point</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-11-18T17:03:03 1763485383"><a href="https://news.ycombinator.com/item?id=45968951">3 months ago</a></span> <span id=unv_45968951></span> | <a href="https://hn.algolia.com/?query=Shard%20Your%20Database&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45362610><td align=right valign=top class=title><span class=rank>6.</span><td valign=top class=votelinks><center><a id=up_45362610 class=clicky href="https://news.ycombinator.com/vote?id=45362610&amp;how=up&amp;auth=e279f15cd9dd669a04c859bb5814eb2ea83f6b2c&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/writing-nothing-but-docs>Writing Nothing but Docs for a Week</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45362610>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-09-24T16:26:46 1758731206"><a href="https://news.ycombinator.com/item?id=45362610">5 months ago</a></span> <span id=unv_45362610></span> | <a href="https://hn.algolia.com/?query=Writing%20Nothing%20but%20Docs%20for%20a%20Week&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45292363><td align=right valign=top class=title><span class=rank>7.</span><td valign=top class=votelinks><center><a id=up_45292363 class=clicky href="https://news.ycombinator.com/vote?id=45292363&amp;how=up&amp;auth=a3613515e1135d94f07abff3ddcb200f015651eb&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://docs.pgdog.dev/features/pub_sub/>Pub/Sub</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45292363>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-09-18T17:20:52 1758216052"><a href="https://news.ycombinator.com/item?id=45292363">5 months ago</a></span> <span id=unv_45292363></span> | <a href="https://hn.algolia.com/?query=Pub%2FSub&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45201046><td align=right valign=top class=title><span class=rank>8.</span><td valign=top class=votelinks><center><a id=up_45201046 class=clicky href="https://news.ycombinator.com/vote?id=45201046&amp;how=up&amp;auth=688e5660dc4e985e59a3d50865822a1010f07723&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://docs.pgdog.dev/features/sharding/2pc/>Two-Phase Commit</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45201046>3 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-09-10T17:35:06 1757525706"><a href="https://news.ycombinator.com/item?id=45201046">5 months ago</a></span> <span id=unv_45201046></span> | <a href="https://hn.algolia.com/?query=Two-Phase%20Commit&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=45201046">2&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45194417><td align=right valign=top class=title><span class=rank>9.</span><td valign=top class=votelinks><center><a id=up_45194417 class=clicky href="https://news.ycombinator.com/vote?id=45194417&amp;how=up&amp;auth=2407fdb6bce7b6f9ca9bb0ce7fffca1288c28024&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://github.com/pgdogdev/pgdog/pull/419 rel=nofollow>Implement two-phase commit (2pc)</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=github.com/pgdogdev"><span class=sitestr>github.com/pgdogdev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45194417>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-09-10T07:30:23 1757489423"><a href="https://news.ycombinator.com/item?id=45194417">5 months ago</a></span> <span id=unv_45194417></span> | <a href="https://hn.algolia.com/?query=Implement%20two-phase%20commit%20%282pc%29&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45128515><td align=right valign=top class=title><span class=rank>10.</span><td valign=top class=votelinks><center><a id=up_45128515 class=clicky href="https://news.ycombinator.com/vote?id=45128515&amp;how=up&amp;auth=a421a49b1c58762d0bac4d76e733ae1dd9d47d2b&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/sharded-primary-keys>Primary Keys in Sharded Databases</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45128515>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-09-04T15:40:53 1757000453"><a href="https://news.ycombinator.com/item?id=45128515">5 months ago</a></span> <span id=unv_45128515></span> | <a href="https://hn.algolia.com/?query=Primary%20Keys%20in%20Sharded%20Databases&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=45065690><td align=right valign=top class=title><span class=rank>11.</span><td valign=top class=votelinks><center><a id=up_45065690 class=clicky href="https://news.ycombinator.com/vote?id=45065690&amp;how=up&amp;auth=d214235ed5c6d6040c99ce1763ea9a7bff149a09&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/plugins-are-back>PgDog adds support for Rust plugins</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_45065690>3 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-08-29T15:52:43 1756482763"><a href="https://news.ycombinator.com/item?id=45065690">5 months ago</a></span> <span id=unv_45065690></span> | <a href="https://hn.algolia.com/?query=PgDog%20adds%20support%20for%20Rust%20plugins&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=44799614><td align=right valign=top class=title><span class=rank>12.</span><td valign=top class=votelinks><center><a id=up_44799614 class=clicky href="https://news.ycombinator.com/vote?id=44799614&amp;how=up&amp;auth=20f707d372e9a142b47b0288ddd525eab4fa14e2&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/scaling-postgres-listen-notify>Scaling Postgres Listen/Notify</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_44799614>1 point</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-08-05T15:51:46 1754409106"><a href="https://news.ycombinator.com/item?id=44799614">6 months ago</a></span> <span id=unv_44799614></span> | <a href="https://hn.algolia.com/?query=Scaling%20Postgres%20Listen%2FNotify&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=44735874><td align=right valign=top class=title><span class=rank>13.</span><td valign=top class=votelinks><center><a id=up_44735874 class=clicky href="https://news.ycombinator.com/vote?id=44735874&amp;how=up&amp;auth=ab3905d5291a77b2bd4d28486adfca2ec356775f&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/sharding-postgres-at-network-speed>Sharding Postgres at Network Speed</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_44735874>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-07-30T15:56:40 1753891000"><a href="https://news.ycombinator.com/item?id=44735874">6 months ago</a></span> <span id=unv_44735874></span> | <a href="https://hn.algolia.com/?query=Sharding%20Postgres%20at%20Network%20Speed&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=44710975><td align=right valign=top class=title><span class=rank>14.</span><td valign=top class=votelinks><center><a id=up_44710975 class=clicky href="https://news.ycombinator.com/vote?id=44710975&amp;how=up&amp;auth=7fa3eeb6c2de59a3da90c4a3a2e8824b5cec71e5&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/resharding-postgres-at-6.5gb-second>Resharding Postgres at 6.5 GB per second</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_44710975>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-07-28T14:02:56 1753711376"><a href="https://news.ycombinator.com/item?id=44710975">7 months ago</a></span> <span id=unv_44710975></span> | <a href="https://hn.algolia.com/?query=Resharding%20Postgres%20at%206.5%20GB%20per%20second&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=44491104><td align=right valign=top class=title><span class=rank>15.</span><td valign=top class=votelinks><center><a id=up_44491104 class=clicky href="https://news.ycombinator.com/vote?id=44491104&amp;how=up&amp;auth=9ed331467707c48bc3664d350b410d834ccb98d4&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/list-and-range-sharding>Sharding multi-tenant Postgres databases</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_44491104>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-07-07T15:01:36 1751900496"><a href="https://news.ycombinator.com/item?id=44491104">7 months ago</a></span> <span id=unv_44491104></span> | <a href="https://hn.algolia.com/?query=Sharding%20multi-tenant%20Postgres%20databases&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=44099187><td align=right valign=top class=title><span class=rank>16.</span><td valign=top class=votelinks><center><a id=up_44099187 class=clicky href="https://news.ycombinator.com/vote?id=44099187&amp;how=up&amp;auth=63a6cfc69183c7d7d47faa7ecb50bc9364624d40&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://github.com/pgdogdev/pgdog>Show HN: PgDog Shard Postgres without extensions</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=github.com/pgdogdev"><span class=sitestr>github.com/pgdogdev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_44099187>307 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-05-26T16:55:49 1748278549"><a href="https://news.ycombinator.com/item?id=44099187">9 months ago</a></span> <span id=unv_44099187></span> | <a href="https://hn.algolia.com/?query=Show%20HN%3A%20PgDog%20%E2%80%93%20Shard%20Postgres%20without%20extensions&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=44099187">80&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43995188><td align=right valign=top class=title><span class=rank>17.</span><td valign=top class=votelinks><center><a id=up_43995188 class=clicky href="https://news.ycombinator.com/vote?id=43995188&amp;how=up&amp;auth=c04de68bad91fda92ed0d7b4bb90047fc49bde10&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/multi-tenant-pg-can-be-easy>Multi-tenant Postgres can be easy</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43995188>4 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-05-15T14:00:53 1747317653"><a href="https://news.ycombinator.com/item?id=43995188">9 months ago</a></span> <span id=unv_43995188></span> | <a href="https://hn.algolia.com/?query=Multi-tenant%20Postgres%20can%20be%20easy&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43937246><td align=right valign=top class=title><span class=rank>18.</span><td valign=top class=votelinks><center><a id=up_43937246 class=clicky href="https://news.ycombinator.com/vote?id=43937246&amp;how=up&amp;auth=df530f230ced73afc0aeaf58424faf2c2c461553&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/replicating-postgres-production-traffic>Replicating Postgres Production Traffic</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43937246>4 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-05-09T14:34:14 1746801254"><a href="https://news.ycombinator.com/item?id=43937246">9 months ago</a></span> <span id=unv_43937246></span> | <a href="https://hn.algolia.com/?query=Replicating%20Postgres%20Production%20Traffic&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=43937246">2&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43905335><td align=right valign=top class=title><span class=rank>19.</span><td valign=top class=votelinks><center><a id=up_43905335 class=clicky href="https://news.ycombinator.com/vote?id=43905335&amp;how=up&amp;auth=358b3468eea1e835a952603a18ed3b998a7f5be1&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/pgbouncer-vs-pgdog>PgDog vs. PgBouncer</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43905335>3 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-05-06T14:10:57 1746540657"><a href="https://news.ycombinator.com/item?id=43905335">9 months ago</a></span> <span id=unv_43905335></span> | <a href="https://hn.algolia.com/?query=PgDog%20vs.%20PgBouncer&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43845770><td align=right valign=top class=title><span class=rank>20.</span><td valign=top class=votelinks><center><a id=up_43845770 class=clicky href="https://news.ycombinator.com/vote?id=43845770&amp;how=up&amp;auth=1cccc69f0cd6bee56167b8b465a9885685da1b3f&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/sharding-a-real-rails-app>Sharding a Real Rails App</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43845770>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-04-30T14:28:32 1746023312"><a href="https://news.ycombinator.com/item?id=43845770">9 months ago</a></span> <span id=unv_43845770></span> | <a href="https://hn.algolia.com/?query=Sharding%20a%20Real%20Rails%20App&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43844787><td align=right valign=top class=title><span class=rank>21.</span><td valign=top class=votelinks><center><a id=up_43844787 class=clicky href="https://news.ycombinator.com/vote?id=43844787&amp;how=up&amp;auth=afecf556bcf50d6165477d7b7351f1ea11134366&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/sharding-mastodon-part-1>Sharding Mastodon, Part 1</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43844787>4 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-04-30T13:14:08 1746018848"><a href="https://news.ycombinator.com/item?id=43844787">9 months ago</a></span> <span id=unv_43844787></span> | <a href="https://hn.algolia.com/?query=Sharding%20Mastodon%2C%20Part%201&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43762063><td align=right valign=top class=title><span class=rank>22.</span><td valign=top class=votelinks><center><a id=up_43762063 class=clicky href="https://news.ycombinator.com/vote?id=43762063&amp;how=up&amp;auth=5122c88aa0da6a4093808072812b84bd09e447a0&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/building-for-production>Building for Production</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43762063>4 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-04-22T13:40:58 1745329258"><a href="https://news.ycombinator.com/item?id=43762063">10 months ago</a></span> <span id=unv_43762063></span> | <a href="https://hn.algolia.com/?query=Building%20for%20Production&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43693326><td align=right valign=top class=title><span class=rank>23.</span><td valign=top class=votelinks><center><a id=up_43693326 class=clicky href="https://news.ycombinator.com/vote?id=43693326&amp;how=up&amp;auth=98196da394aa772c46aed2825f42d3a3dad6adbd&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/hacking-postgres-wire-protocol>Hacking the Postgres wire protocol</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43693326>229 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-04-15T14:33:10 1744727590"><a href="https://news.ycombinator.com/item?id=43693326">10 months ago</a></span> <span id=unv_43693326></span> | <a href="https://hn.algolia.com/?query=Hacking%20the%20Postgres%20wire%20protocol&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=43693326">50&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43682236><td align=right valign=top class=title><span class=rank>24.</span><td valign=top class=votelinks><center><a id=up_43682236 class=clicky href="https://news.ycombinator.com/vote?id=43682236&amp;how=up&amp;auth=0b90f228e1ba5420a6b376e6c7f064b7d547541e&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/vertical-sharding-sucks>Vertical Sharding Sucks</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43682236>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-04-14T15:16:06 1744643766"><a href="https://news.ycombinator.com/item?id=43682236">10 months ago</a></span> <span id=unv_43682236></span> | <a href="https://hn.algolia.com/?query=Vertical%20Sharding%20Sucks&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43484399><td align=right valign=top class=title><span class=rank>25.</span><td valign=top class=votelinks><center><a id=up_43484399 class=clicky href="https://news.ycombinator.com/vote?id=43484399&amp;how=up&amp;auth=a538fc28d113cf3c15f60afb395697a77100d910&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/sharding-pgvector>Sharding Pgvector</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43484399>86 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-03-26T17:10:30 1743009030"><a href="https://news.ycombinator.com/item?id=43484399">11 months ago</a></span> <span id=unv_43484399></span> | <a href="https://hn.algolia.com/?query=Sharding%20Pgvector&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=43484399">10&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43364668><td align=right valign=top class=title><span class=rank>26.</span><td valign=top class=votelinks><center><a id=up_43364668 class=clicky href="https://news.ycombinator.com/vote?id=43364668&amp;how=up&amp;auth=3820793e0892b0492e81e36df551a1246f1a1d01&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://pgdog.dev/blog/you-can-make-postgres-scale>Making Postgres scale</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=pgdog.dev"><span class=sitestr>pgdog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43364668>225 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-03-14T17:07:11 1741972031"><a href="https://news.ycombinator.com/item?id=43364668">11 months ago</a></span> <span id=unv_43364668></span> | <a href="https://hn.algolia.com/?query=Making%20Postgres%20scale&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=43364668">188&nbsp;comments</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43030255><td align=right valign=top class=title><span class=rank>27.</span><td valign=top class=votelinks><center><a id=up_43030255 class=clicky href="https://news.ycombinator.com/vote?id=43030255&amp;how=up&amp;auth=eaaad09302464f2dda3e38491a64b8d354beed64&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://levkk.bearblog.dev/working-with-the-postgres-protocol/ rel=nofollow>Working with the Postgres Protocol</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=levkk.bearblog.dev"><span class=sitestr>levkk.bearblog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43030255>3 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-02-12T22:06:17 1739397977"><a href="https://news.ycombinator.com/item?id=43030255">on Feb 12, 2025</a></span> <span id=unv_43030255></span> | <a href="https://hn.algolia.com/?query=Working%20with%20the%20Postgres%20Protocol&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=43014284><td align=right valign=top class=title><span class=rank>28.</span><td valign=top class=votelinks><center><a id=up_43014284 class=clicky href="https://news.ycombinator.com/vote?id=43014284&amp;how=up&amp;auth=80195ae003c5140d3e3098340b0f43a91e52e05c&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://levkk.bearblog.dev/sharding-postgres-with-logical-replication/ rel=nofollow>Sharding Postgres with Logical Replication</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=levkk.bearblog.dev"><span class=sitestr>levkk.bearblog.dev</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_43014284>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-02-11T15:53:39 1739289219"><a href="https://news.ycombinator.com/item?id=43014284">on Feb 11, 2025</a></span> <span id=unv_43014284></span> | <a href="https://hn.algolia.com/?query=Sharding%20Postgres%20with%20Logical%20Replication&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=42697751><td align=right valign=top class=title><span class=rank>29.</span><td valign=top class=votelinks><center><a id=up_42697751 class=clicky href="https://news.ycombinator.com/vote?id=42697751&amp;how=up&amp;auth=2a5c5dc115255fd12253d213d1c578f476265511&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://github.com/levkk/pgdog rel=nofollow>Show HN: PgDog, Load Balancer for PostgreSQL</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=github.com/levkk"><span class=sitestr>github.com/levkk</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_42697751>2 points</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2025-01-14T14:41:24 1736865684"><a href="https://news.ycombinator.com/item?id=42697751">on Jan 14, 2025</a></span> <span id=unv_42697751></span> | <a href="https://hn.algolia.com/?query=Show%20HN%3A%20PgDog%2C%20Load%20Balancer%20for%20PostgreSQL&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a> | <a href="https://news.ycombinator.com/item?id=42697751">1&nbsp;comment</a></span><tr class=spacer style=height:5px><tr class="athing submission" id=42297173><td align=right valign=top class=title><span class=rank>30.</span><td valign=top class=votelinks><center><a id=up_42297173 class=clicky href="https://news.ycombinator.com/vote?id=42297173&amp;how=up&amp;auth=a601d2ae172c9618c1071b00b9424004063e727d&amp;goto=submitted%3Fid%3Dlevkk"><div class=votearrow title=upvote></div></a></center><td class=title><span class=titleline><a href=https://github.com/levkk/rwf/issues/51 rel=nofollow>Rwf: Call for Beta Testers</a><span class="sitebit comhead"> (<a href="https://news.ycombinator.com/from?site=github.com/levkk"><span class=sitestr>github.com/levkk</span></a>)</span></span><tr><td colspan=2><td class=subtext><span class=subline><span class=score id=score_42297173>1 point</span> by <a href="https://news.ycombinator.com/user?id=levkk" class=hnuser>levkk</a> <span class=age title="2024-12-02T15:34:33 1733153673"><a href="https://news.ycombinator.com/item?id=42297173">on Dec 2, 2024</a></span> <span id=unv_42297173></span> | <a href="https://hn.algolia.com/?query=Rwf%3A%20Call%20for%20Beta%20Testers&amp;type=story&amp;dateRange=all&amp;sort=byDate&amp;storyText=false&amp;prefix&amp;page=0" class=hnpast>past</a></span><tr class=spacer style=height:5px><tr class=morespace style=height:10px><tr><td colspan=2><td class=title><a href="https://news.ycombinator.com/submitted?id=levkk&amp;next=41914544&amp;n=31" class=morelink rel=next>More</a></table><tr><td><img src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" height=10 width=0><table width=100% cellspacing=0 cellpadding=1><tbody><tr><td bgcolor=#ff6600></table><br>
<center><span class=yclinks><a href=https://news.ycombinator.com/newsguidelines.html>Guidelines</a> | <a href=https://news.ycombinator.com/newsfaq.html>FAQ</a> | <a href=https://news.ycombinator.com/lists>Lists</a> | <a href=https://github.com/HackerNews/API>API</a> | <a href=https://news.ycombinator.com/security.html>Security</a> | <a href=https://www.ycombinator.com/legal/>Legal</a> | <a href=https://www.ycombinator.com/apply/>Apply to YC</a> | <a href=mailto:hn@ycombinator.com>Contact</a></span><br><br>
<form action=//hn.algolia.com/>Search: <input type=text name=q size=17 autocorrect=off spellcheck=false autocapitalize=off autocomplete=off value><template shadowrootmode=user-agent><div contenteditable=plaintext-only></div></template></form></center></table></center><single-file-infobar style="accent-color: initial !important; place-content: initial !important; place-items: initial !important; place-self: initial !important; alignment-baseline: initial !important; anchor-name: initial !important; anchor-scope: initial !important; animation-composition: initial !important; animation: initial !important; appearance: initial !important; aspect-ratio: initial !important; backdrop-filter: initial !important; backface-visibility: initial !important; background: initial !important; background-blend-mode: initial !important; baseline-shift: initial !important; block-size: initial !important; border-block: initial !important; border: initial !important; border-radius: initial !important; border-collapse: initial !important; border-end-end-radius: initial !important; border-end-start-radius: initial !important; border-inline: initial !important; border-start-end-radius: initial !important; border-start-start-radius: initial !important; inset: initial !important; box-shadow: initial !important; box-sizing: initial !important; break-after: initial !important; break-before: initial !important; break-inside: initial !important; buffered-rendering: initial !important; caption-side: initial !important; caret-color: initial !important; clear: initial !important; clip: initial !important; clip-path: initial !important; clip-rule: initial !important; color: initial !important; color-interpolation: initial !important; color-interpolation-filters: initial !important; color-scheme: initial !important; column-count: initial !important; column-fill: initial !important; gap: initial !important; column-rule-color: initial !important; column-rule-style: initial !important; column-rule-width: initial !important; column-span: initial !important; column-width: initial !important; contain: initial !important; contain-intrinsic-block-size: initial !important; contain-intrinsic-size: initial !important; contain-intrinsic-inline-size: initial !important; container-name: initial !important; container-type: initial !important; content: initial !important; content-visibility: initial !important; counter-increment: initial !important; counter-reset: initial !important; counter-set: initial !important; cursor: initial !important; cx: initial !important; cy: initial !important; direction: initial !important; display: initial !important; dominant-baseline: initial !important; dynamic-range-limit: initial !important; empty-cells: initial !important; field-sizing: initial !important; fill: initial !important; fill-opacity: initial !important; fill-rule: initial !important; filter: initial !important; flex: initial !important; flex-flow: initial !important; float: initial !important; flood-color: initial !important; flood-opacity: initial !important; font-family: initial !important; font-feature-settings: initial !important; font-kerning: initial !important; font-optical-sizing: initial !important; font-palette: initial !important; font-size: initial !important; font-size-adjust: initial !important; font-style: initial !important; font-synthesis-small-caps: initial !important; font-synthesis-style: initial !important; font-synthesis-weight: initial !important; font-variant-alternates: initial !important; font-variant-caps: initial !important; font-variant-east-asian: initial !important; font-variant-ligatures: initial !important; font-variant-numeric: initial !important; font-variant-position: initial !important; font-variation-settings: initial !important; font-weight: initial !important; font-width: initial !important; glyph-orientation-horizontal: initial !important; glyph-orientation-vertical: initial !important; grid: initial !important; grid-column-end: initial !important; grid-column-start: initial !important; grid-row-end: initial !important; grid-row-start: initial !important; hanging-punctuation: initial !important; height: initial !important; hyphenate-character: initial !important; hyphens: initial !important; image-orientation: initial !important; image-rendering: initial !important; inline-size: initial !important; inset-block: initial !important; inset-inline: initial !important; isolation: initial !important; letter-spacing: initial !important; lighting-color: initial !important; line-break: initial !important; line-height: initial !important; list-style: initial !important; margin-block: initial !important; margin: initial !important; margin-inline: initial !important; margin-trim: initial !important; marker: initial !important; mask: initial !important; mask-composite: initial !important; mask-mode: initial !important; mask-size: initial !important; mask-type: initial !important; math-shift: initial !important; math-style: initial !important; max-block-size: initial !important; max-height: initial !important; max-inline-size: initial !important; max-width: initial !important; min-block-size: initial !important; min-height: initial !important; min-inline-size: initial !important; min-width: initial !important; mix-blend-mode: initial !important; object-fit: initial !important; object-position: initial !important; offset-anchor: initial !important; offset-distance: initial !important; offset-path: initial !important; offset-position: initial !important; offset-rotate: initial !important; opacity: initial !important; order: initial !important; orphans: initial !important; outline: initial !important; outline-offset: initial !important; overflow-block: initial !important; overflow-inline: initial !important; overflow-wrap: initial !important; overflow: initial !important; overscroll-behavior-block: initial !important; overscroll-behavior-inline: initial !important; overscroll-behavior: initial !important; padding-block: initial !important; padding: initial !important; padding-inline: initial !important; paint-order: initial !important; perspective: initial !important; perspective-origin: initial !important; pointer-events: initial !important; position: initial !important; position-anchor: initial !important; position-area: initial !important; position-try: initial !important; position-visibility: initial !important; print-color-adjust: initial !important; quotes: initial !important; r: initial !important; resize: initial !important; rotate: initial !important; ruby-align: initial !important; ruby-overhang: initial !important; ruby-position: initial !important; rx: initial !important; ry: initial !important; scale: initial !important; scroll-behavior: initial !important; scroll-margin-block: initial !important; scroll-margin: initial !important; scroll-margin-inline: initial !important; scroll-padding-block: initial !important; scroll-padding: initial !important; scroll-padding-inline: initial !important; scroll-snap-align: initial !important; scroll-snap-stop: initial !important; scroll-snap-type: initial !important; scroll-timeline: initial !important; scrollbar-color: initial !important; scrollbar-gutter: initial !important; scrollbar-width: initial !important; shape-image-threshold: initial !important; shape-margin: initial !important; shape-outside: initial !important; shape-rendering: initial !important; speak-as: initial !important; stop-color: initial !important; stop-opacity: initial !important; stroke: initial !important; stroke-color: initial !important; stroke-dasharray: initial !important; stroke-dashoffset: initial !important; stroke-linecap: initial !important; stroke-linejoin: initial !important; stroke-miterlimit: initial !important; stroke-opacity: initial !important; stroke-width: initial !important; tab-size: initial !important; table-layout: initial !important; text-align: initial !important; text-align-last: initial !important; text-anchor: initial !important; text-autospace: initial !important; text-box: initial !important; text-combine-upright: initial !important; text-decoration: initial !important; text-decoration-skip-ink: initial !important; text-emphasis-color: initial !important; text-emphasis-position: initial !important; text-emphasis-style: initial !important; text-indent: initial !important; text-orientation: initial !important; text-overflow: initial !important; text-rendering: initial !important; text-shadow: initial !important; text-transform: initial !important; text-underline-offset: initial !important; text-underline-position: initial !important; text-wrap: initial !important; timeline-scope: initial !important; touch-action: initial !important; transform: initial !important; transform-box: initial !important; transform-origin: initial !important; transform-style: initial !important; transition: initial !important; translate: initial !important; unicode-bidi: initial !important; vector-effect: initial !important; vertical-align: initial !important; view-timeline: initial !important; view-transition-class: initial !important; view-transition-name: initial !important; visibility: initial !important; white-space: initial !important; widows: initial !important; width: initial !important; will-change: initial !important; word-break: initial !important; word-spacing: initial !important; writing-mode: initial !important; x: initial !important; y: initial !important; z-index: initial !important; zoom: initial !important; -apple-pay-button-style: initial !important; -apple-pay-button-type: initial !important; border-spacing: initial !important; -webkit-box-align: initial !important; -webkit-box-decoration-break: initial !important; -webkit-box-direction: initial !important; -webkit-box-flex: initial !important; -webkit-box-flex-group: initial !important; -webkit-box-lines: initial !important; -webkit-box-ordinal-group: initial !important; -webkit-box-orient: initial !important; -webkit-box-pack: initial !important; -webkit-box-reflect: initial !important; -webkit-column-axis: initial !important; -webkit-column-progression: initial !important; -webkit-cursor-visibility: initial !important; -webkit-font-smoothing: initial !important; -webkit-hyphenate-limit-after: initial !important; -webkit-hyphenate-limit-before: initial !important; -webkit-hyphenate-limit-lines: initial !important; -webkit-initial-letter: initial !important; -webkit-line-align: initial !important; -webkit-line-box-contain: initial !important; -webkit-line-clamp: initial !important; -webkit-line-grid: initial !important; -webkit-line-snap: initial !important; -webkit-locale: initial !important; -webkit-nbsp-mode: initial !important; -webkit-rtl-ordering: initial !important; -webkit-text-fill-color: initial !important; -webkit-text-security: initial !important; -webkit-text-stroke-color: initial !important; -webkit-text-stroke-width: initial !important; -webkit-text-zoom: initial !important; -webkit-user-drag: initial !important; -webkit-user-modify: initial !important; -webkit-user-select: initial !important;"><template shadowrootmode=open><div><style>.infobar,.infobar .infobar-icon,.infobar .infobar-link-icon {min-inline-size:28px;min-block-size:28px;box-sizing:border-box;}.infobar,.infobar .infobar-close-icon,.infobar .infobar-link-icon {opacity:0.7;transition:opacity 250ms;}.infobar:hover,.infobar .infobar-close-icon:hover,.infobar .infobar-link-icon:hover {opacity:1;}.infobar,.infobar-content {display:flex;}.infobar {position:fixed;max-height:calc(100% - 32px);top:16px;right:16px;margin-inline-start:16px;margin-block-end:16px;color:#2d2d2d;background-color:#737373;border:2px solid;border-color:#eee;border-radius:16px;z-index:2147483647;animation-name:flash;animation-duration:.5s;animation-timing-function:cubic-bezier(0.39,0.58,0.57,1);animation-delay:1s;animation-iteration-count:2;}.infobar:valid,.infobar:not(:focus-within):not(.infobar-focus) .infobar-content {display:none;}.infobar:focus-within,.infobar.infobar-focus {background-color:#f9f9f9;border-color:#878787;border-radius:8px;opacity:1;transition-property:opacity,background-color,border-color,border-radius,color;}.infobar-content {border:2px solid;border-color:#f9f9f9;border-radius:6px;background-color:#f9f9f9;overflow:auto;}.infobar-content span {font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:18px;word-break:break-word;white-space:pre-wrap;margin-inline:4px;margin-block:4px;}.infobar .infobar-icon,.infobar .infobar-close-icon,.infobar .infobar-link-icon {cursor:pointer;background-position:center;background-repeat:no-repeat;}.infobar .infobar-close-icon,.infobar .infobar-link-icon {align-self:flex-start;}.infobar .infobar-icon {position:absolute;min-inline-size:24px;min-block-size:24px;}@keyframes flash {0%,100% { background-color:#737373;}50% { background-color:#dd6a00;}}.infobar:focus-within .infobar-icon,.infobar.infobar-focus .infobar-icon {z-index:-1;background-image:none;margin:4px;}.infobar .infobar-close-icon {min-inline-size:22px;min-block-size:22px;}.infobar .infobar-icon {background-color:transparent;background-size:70%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9kj1Iw0AYht+mSkUrDnYQcchQnSyIijqWKhbBQmkrtOpgcukfNGlIUlwcBdeCgz+LVQcXZ10dXAVB8AfEydFJ0UVK/C4ptIjx4LiH9+59+e67A4RGhalm1wSgapaRisfEbG5VDLyiDwEAvZiVmKkn0osZeI6ve/j4ehfhWd7n/hz9St5kgE8kjjLdsIg3iGc2LZ3zPnGIlSSF+Jx43KACiR+5Lrv8xrnosMAzQ0YmNU8cIhaLHSx3MCsZKvE0cVhRNcoXsi4rnLc4q5Uaa9XJbxjMaytprtMcQRxLSCAJETJqKKMCCxFaNVJMpGg/5uEfdvxJcsnkKoORYwFVqJAcP/gb/O6tWZiadJOCMaD7xbY/RoHALtCs2/b3sW03TwD/M3Cltf3VBjD3SXq9rYWPgIFt4OK6rcl7wOUOMPSkS4bkSH6aQqEAvJ/RM+WAwVv6EGtu31r7OH0AMtSr5Rvg4BAYK1L2use9ezr79u+ZVv9+AFlNcp0UUpiqAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AsHADIRLMaOHwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAPUExURQAAAIqKioyNjY2OjvDw8L2y1DEAAAABdFJOUwBA5thmAAAAAWJLR0QB/wIt3gAAAGNJREFUSMdjYCAJsLi4OBCQx6/CBQwIGIDPCBcXAkYQUsACU+AwlBVQHg6Eg5pgZBGOboIJZugDFwRwoJECJCUOhJI1wZwzqmBUwagCuipgIqTABG9h7YIKaKGAURAFEF/6AQAO4HqSoDP8bgAAAABJRU5ErkJggg==);}.infobar .infobar-link-icon {right:4px;background-size:60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAgMAAADXB5lNAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9kj1Iw0AYht+mSkUrDnYQcchQnSyIijqWKhbBQmkrtOpgcukfNGlIUlwcBdeCgz+LVQcXZ10dXAVB8AfEydFJ0UVK/C4ptIjx4LiH9+59+e67A4RGhalm1wSgapaRisfEbG5VDLyiDwEAvZiVmKkn0osZeI6ve/j4ehfhWd7n/hz9St5kgE8kjjLdsIg3iGc2LZ3zPnGIlSSF+Jx43KACiR+5Lrv8xrnosMAzQ0YmNU8cIhaLHSx3MCsZKvE0cVhRNcoXsi4rnLc4q5Uaa9XJbxjMaytprtMcQRxLSCAJETJqKKMCCxFaNVJMpGg/5uEfdvxJcsnkKoORYwFVqJAcP/gb/O6tWZiadJOCMaD7xbY/RoHALtCs2/b3sW03TwD/M3Cltf3VBjD3SXq9rYWPgIFt4OK6rcl7wOUOMPSkS4bkSH6aQqEAvJ/RM+WAwVv6EGtu31r7OH0AMtSr5Rvg4BAYK1L2use9ezr79u+ZVv9+AFlNcp0UUpiqAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AsHAB8H+DhhoQAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAJUExURQAAAICHi4qKioTuJAkAAAABdFJOUwBA5thmAAAAAWJLR0QCZgt8ZAAAAJJJREFUOI3t070NRCEMA2CnYAOyDyPwpHj/Va7hJ3FzV7zy3ET5JIwoAF6Jk4wzAJAkzxAYG9YRTgB+24wBgKmfrGAKTcEfAY4KRlRoIeBTgKOCERVaCPgU4Khge2GqKOBTgKOCERVaAEC/4PNcnyoSWHpjqkhwKxbcig0Q6AorXYF/+A6eIYD1lVbwG/jdA6/kA2THRAURVubcAAAAAElFTkSuQmCC);}.infobar .infobar-close-icon {appearance:none;background-size:80%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAgMAAADXB5lNAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9kj1Iw0AYht+mSkUrDnYQcchQnSyIijqWKhbBQmkrtOpgcukfNGlIUlwcBdeCgz+LVQcXZ10dXAVB8AfEydFJ0UVK/C4ptIjx4LiH9+59+e67A4RGhalm1wSgapaRisfEbG5VDLyiDwEAvZiVmKkn0osZeI6ve/j4ehfhWd7n/hz9St5kgE8kjjLdsIg3iGc2LZ3zPnGIlSSF+Jx43KACiR+5Lrv8xrnosMAzQ0YmNU8cIhaLHSx3MCsZKvE0cVhRNcoXsi4rnLc4q5Uaa9XJbxjMaytprtMcQRxLSCAJETJqKKMCCxFaNVJMpGg/5uEfdvxJcsnkKoORYwFVqJAcP/gb/O6tWZiadJOCMaD7xbY/RoHALtCs2/b3sW03TwD/M3Cltf3VBjD3SXq9rYWPgIFt4OK6rcl7wOUOMPSkS4bkSH6aQqEAvJ/RM+WAwVv6EGtu31r7OH0AMtSr5Rvg4BAYK1L2use9ezr79u+ZVv9+AFlNcp0UUpiqAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AsHAB8VC4EQ6QAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAJUExURQAAAICHi4qKioTuJAkAAAABdFJOUwBA5thmAAAAAWJLR0QCZgt8ZAAAAJtJREFUOI3NkrsBgCAMRLFwBPdxBArcfxXFkO8rbKWAAJfHJ9faf9vuYX/749T5NmShm3bEwbe2SxeuM4+2oxDL1cDoKtVUjRy+tH78Cv2CS+wIiQNC1AEhk4AQeUTMWUJMfUJMSEJMSEY8kIx4IONroaYAimNxsXp1PA7PxwfVL8QnowwoVC0lig07wDDVUjAdbAnjwtow/z/bDW7eI4M2KruJAAAAAElFTkSuQmCC);}.infobar { top:16px; bottom:auto; }.infobar { right:16px; left:auto; }</style><form class="infobar"><span tabindex="-1" class="infobar-icon"></span><span tabindex="-1" class="infobar-content"><input type="checkbox" required="" class="infobar-close-icon" title="Close"><span>Tue Feb 24 2026 10:58:52 GMT+0800 (中国标准时间)</span><a class="infobar-link-icon" target="_blank" rel="noopener noreferrer" title="Open source URL: https://news.ycombinator.com/submitted?id=levkk" href="https://news.ycombinator.com/submitted?id=levkk"></a></span></form><script>function Wo(n,{saveUrl:e,infobarContent:t,saveDate:a}){if(e){const o=n.querySelector("single-file-infobar").shadowRoot;o.querySelector(".infobar-content span").textContent=t||a;const i=o.querySelector(".infobar-content .infobar-link-icon");i.href=e,i.title="Open source URL: "+e}};function Ho(n,e=_o){const t=n.evaluate("//comment()",n,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);let a=t&&t.singleNodeValue;if(a&&a.nodeType==Node.COMMENT_NODE&&a.textContent.includes(e)){const n=a.textContent.split("\n"),[,,e,...t]=n,o=e.match(/^ url: (.*) ?$/),i=o&&o[1];if(i){let n,e;if(t.length&&(e=t[0].split("saved date: ")[1],e&&t.shift(),t.length>1)){let e=t[0].split("info: ")[1].trim();for(let n=1;n<t.length-1;n++)e+="\n"+t[n].trim();n=e.trim()}return{saveUrl:i,infobarContent:n,saveDate:e}}}};(function Go(n,e){const t=Ho(n,e);t&&t.saveUrl&&Wo(n,t)})(document, "SingleFile");</script></div></template></single-file-infobar>