2 पॉइंट द्वारा GN⁺ 3 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • PostgreSQL के connection/backend/shared memory/WAL/storage/checkpoint/autovacuum/replication को इमारतों और ज़ोन्स के रूप में दिखाने वाला 3D शैक्षिक सिमुलेशन है, जिसमें हर इमारत और animation वास्तविक database mechanism से मेल खाता है
  • shared_buffers का clock-sweep replacement, WAL write और flush, checkpoint pacing, xmin horizon और table bloat जैसे internal operations को धीमे time scale पर देखने के लिए संख्याओं और scale को छोटा किया गया है
  • यह वास्तविक PostgreSQL code चलाने वाला emulator नहीं, बल्कि हाथ से लिखा गया model है; PostgreSQL docs और source के आधार पर तीन expert reviews और अलग visual audit से गुज़रा है, और 210 tests से मुख्य calculations और limit values को fixed रखा गया है
  • buffer shortage, long-running transaction, checkpoint storm, synchronous_commit=off, slow replication replay जैसे scenarios चलाकर operational settings का latency/bloat/durability/replication lag पर असर सीधे देखा जा सकता है
  • यह three.js/TypeScript/Vite से बना static WebGL2 application है, और भविष्य में वास्तविक WebAssembly PostgreSQL के query execution results और plans को मौजूदा internal model से जोड़ने वाली hybrid architecture की दिशा भी विचाराधीन है

PostgreSQL को शहर के रूप में दिखाने का तरीका

  • PGSimCity PostgreSQL की internal structure को चलकर explore करने योग्य independent/non-commercial educational visualization project है
  • central plaza shared_buffers को दिखाता है; 1,024 page frames की ऊंचाई clock-sweep usage_count और रंग वास्तविक buffer state को दर्शाते हैं
  • पूर्व की नारंगी zone WAL है, plaza के नीचे excavation data directory है, और दक्षिण का शहर standby server को दिखाता है जो primary server से भेजे गए WAL को थोड़ी देरी से replay करता है
  • इसे उन engineers को नीचे दिए गए phenomena समझाने के लिए design किया गया है जिन्होंने database को सीधे operate नहीं किया है
    • checkpoints latency को अचानक क्यों बढ़ा देते हैं
    • खत्म न हुआ transaction table bloat को कैसे जारी रखता है
    • synchronous_commit commit के समय कौन-सी cost लगाता है

Model की accuracy और limits

  • PGSimCity अभी 0.x stage का model है और PostgreSQL emulator नहीं है
    • PostgreSQL source code execute नहीं करता
    • इंसानों को बदलाव दिख सकें, इसके लिए numbers और time scale को adjust करता है
    • SQL parse नहीं करता या वास्तविक query results calculate नहीं करता
  • PostgreSQL behavior की accuracy को postgresql.org/docs और source code से मिलाने के लिए तीन expert reviews हुए हैं, और हर finding को counter-check करने के लिए assigned अलग reviewer ने फिर verify किया है
  • building layout/adjacency/animations से implicit रूप से बनने वाले claims का भी अलग audit हुआ है
  • इसमें 210 tests शामिल हैं; कोई test fail होने पर CI build रुक जाता है
    • WAL-based checkpoint start point: max_wal_size / (1 + checkpoint_completion_target)
    • cache hit ratio: blks_hit / (blks_hit + blks_read)
    • clock-sweep usage_count maximum value: 5
  • मिले हुए errors और fixes की प्रक्रिया commit history में दर्ज है
  • touch operations अभी केवल Chrome mobile emulation में verified हैं
  • simplified behavior हर component के inspector में स्पष्ट किया गया है

वास्तविक engine से जोड़ने की संभावना

  • फिलहाल clock-sweep द्वारा frame-by-frame victim page चुनने जैसी PostgreSQL के बाहर expose न होने वाली internal steps दिखाने के लिए कस्टम-written simulation इस्तेमाल होता है
  • PGlite की तरह वास्तविक PostgreSQL को WebAssembly में चलाने पर query results और execution plans को वास्तविक engine पर छोड़ा जा सकता है
  • browser में वास्तविक engine जो information दे सकता है, वह catalog, pg_stat_* views, EXPLAIN आदि PostgreSQL द्वारा externally exposed scope तक सीमित है
  • एक hybrid तरीका भी संभव है जिसमें वास्तविक execution और plans model के भीतर movements को drive करें, लेकिन यह कोई confirmed development commitment नहीं, बल्कि future direction है

शहर के zones और components

  • Client sky: application layer से आने वाले connections
  • Postmaster: supervision process जो हर connection के लिए backend process बनाता है, लेकिन user data को सीधे access नहीं करता
  • Backend row: 16 backend processes, जिनमें lights idle in transaction सहित current state दिखाती हैं
  • Shared memory plaza
    • shared_buffers
    • wal_buffers
    • ProcArray
    • lock table
    • CLOG
    • buffer mapping table
  • The excavation: memory area और disk area की boundary
  • Storage
    • 8KiB pages से बनी heap file
    • वास्तविक tree-shape वाला B-tree
    • TOAST
    • FSM
    • visibility map
    • operating system page cache
    • disk
  • WAL district: walwriter → pg_wal segments → archiver → walsender
  • Maintenance yard: checkpointer/background writer/autovacuum launcher और worker
  • Standby: walreceiver/WAL replay करने वाला startup process/दो processes के बीच lag
  • Query lab: चुने गए backend के statement को parse → rewrite → plan → execute stages में खोलकर दिखाता है

रंग और visual meaning

  • रंग सजावट नहीं, बल्कि state और mechanism बताते हैं
    • WAL: नारंगी
    • dirty page: लाल
    • clean page: नीला
    • vacuum: बैंगनी
    • checkpoint: गुलाबी
    • background writer: हरा-नीला
    • replication: orange
    • storage: हरा
    • index: aqua
    • lock: लाल
  • structures matte हैं, meaning वाले elements neon में दिखाए गए हैं, और सिर्फ emissive materials को bloom threshold से ऊपर जाने के लिए configure किया गया है

खुद चलाकर देखने योग्य scenarios

  • shared_buffers को 64 pages तक घटाना
    • usage_count टूटता है और clock hand तेजी से घूमता है
    • हटाने के लिए clean pages कम पड़ने लगते हैं, तो backends अपनी dirty pages को खुद write करना शुरू करते हैं
  • Long-running transaction activate करना
    • ProcArray का xmin horizon नीचे जाता है और लाल हो जाता है
    • autovacuum worker लगातार घूमता रहता है, लेकिन साफ किए जाने वाले tuples हटा नहीं पाता
    • sessions table bloat होती है और recover नहीं होती
  • Checkpoint storm चलाना
    • checkpointer तेज होता है और fsync stage डगमगाती है
    • इसके बाद full-page writes WAL zone में बड़ी मात्रा में आने लगते हैं
  • synchronous_commit=off setting
    • backend commit_wait में इंतज़ार नहीं करता
    • immediate response के बदले में मिली durability condition भी साथ में देखी जा सकती है
  • Slow replay activate करना
    • standby server के sent/written/flushed/applied LSN एक-दूसरे से दूर होने लगते हैं
    • यह अंतर pg_stat_replication में दिखने वाले replication lag से मेल खाता है
  • G key दबाने पर 1.7m ऊंचाई वाले walking viewpoint पर उतरकर buffers और buildings को eye level से देखा जा सकता है

Navigation और controls

  • mouse और touch controls
    • left drag: map को पकड़कर खिसकाने जैसा movement
    • right drag: शहर के चारों ओर rotate
    • wheel: cursor position के आधार पर zoom in/out
    • one finger: move
    • two fingers: zoom in/out, rotate, tilt change
  • movement mode
    • W/A/S/D या arrow keys: move
    • Space/E: ऊपर जाना
    • C/Q: नीचे जाना
    • Shift: fast move
    • Alt: precise move
  • main keys
    • F: flight/orbit camera switch
    • G: ground walking
    • H: initial overview पर लौटना
    • T: पूरे शहर की 14-chapter guided tour
    • / या Ctrl-K: components/settings/scenarios search
    • ?: keyboard map और color legend
    • K या P: pause/resume
    • ,/.: 0.1×~5× speed control
    • 1~8: clients/backends/shared buffers/WAL/storage/checkpointer/autovacuum/standby zones में जाना

License और trademarks

  • Apache-2.0 license के तहत distributed है
  • इसमें SimCity का code/assets/art/logo/characters/audio/game content शामिल नहीं है
  • यह Electronic Arts और PostgreSQL project से affiliated/sponsored/approved नहीं, बल्कि independent educational project है

1 टिप्पणियां

 
GN⁺ 3 시간 전
Hacker News की राय
  • यहां जिस दिशा में कोशिश की जा रही है, वह मुझे सच में पसंद है, लेकिन टूर फीचर में noise बहुत ज्यादा है। स्क्रीन पर ढेरों बॉक्स और elements लगातार बदलते रहते हैं, जिससे समझना मुश्किल हो जाता है कि हो क्या रहा है, और अगले topic पर अपने-आप जाने के बजाय इसे user के हाथ से आगे बढ़ने वाला बनाना चाहिए।
    एक साथ बरसती जानकारी को बस passive तरीके से देखते रहना उलझन पैदा करता है। तकनीक के अंदरूनी कामकाज को दिखाने वाला approach अपने-आप में उपयोगी है, लेकिन data, graphs और info boxes जोड़ने के बजाय focus को संकरा करने की जरूरत है।

    • शानदार 3D स्क्रीन का 80% popup ढक रहे हैं। noise को आसानी से कम करने वाला विकल्प स्पष्ट रूप से देना और popup को translucent बनाना अच्छा रहेगा।
    • टूर में TTS जोड़ने पर विचार किया जा सकता है।
    • अगर software में टूर फीचर की जरूरत पड़ रही है, तो यह संकेत हो सकता है कि UX बेहतर करने की जरूरत है। भले ही आप नया feature बताना चाहते हों, user जरूरत पड़ने पर उसे स्वाभाविक रूप से खोज लेते हैं।
  • इंसानी दिमाग की सीमाएं developer और user दोनों के लिए समान हैं। LLM से complex चीजें बनाई जा सकती हैं, लेकिन सजावटी complexity यानी greeble एक स्तर से आगे चली जाए तो वह दूसरे इंसान के अनुभव के लिए design की हुई नहीं लगती।
    अगर इसे LLM के बिना बनाया गया होता, तो developer खुद पूरा mental model दिमाग में नहीं रख पाता और complexity कम कर देता; user की भी वही सीमाएं हैं। animation और चमकती lights वाले metaphor को समझने की कोशिश करें तो भी meaning दब जाता है।
    समझ नहीं आता कि नया process pipe से होकर building तक पहुंचने वाला rectangle क्यों है, और उसके बाद pinball switch लाल क्यों चमकता है। किसी चीज पर click करने पर "sessions is the victim" वाला छोटा popup एक paragraph के साथ थोड़ी देर दिखकर गायब हो जाता है, जिससे उलझन और बढ़ती है।
    हो सकता है यह educational न हो, या मेरी जानकारी कम हो; लेकिन इसे बस एक अनोखी creation मानें तो काफी cool है।

  • पहला screen देखते ही मुझे उम्मीद थी कि query डालने पर input parsing से result return होने तक पूरा flow step by step दिखेगा, और query से अलग parallel में हमेशा चलने वाले autonomous processes भी समझ आ जाएंगे।
    कोशिश अपने-आप में बढ़िया है, लेकिन कहां से शुरू करूं और कहां खत्म करूं, समझ नहीं आता।

    • T दबाकर देखो।
  • database के अंदर scheduling समझने के लिए पहले ढेरों architecture diagrams की जरूरत पड़ती थी। PGSimCity जिस तरह complex technical implementation process को दिलचस्प रूप में दिखाता है, वह हैरान करने वाला है।
    open source होने के कारण यही idea cloud computing या Kubernetes जैसे दूसरे domains में भी reuse किया जा सकता है।

    • मैं हमेशा Fly.io के deployment system और state tracking को Factorio नाम के visual metaphor से समझाने वाला tool बनाना चाहता था।
    • मैं लगातार एक Kubernetes visualization tool बनाना चाहता हूं। मौजूदा tools भी हैं, लेकिन आखिरी बार देखने पर वे खास अच्छे नहीं लगे थे।
  • gdb से program debug करते हुए deep focus में मेरे दिमाग में जो तस्वीर बनती है, यह उससे बहुत मिलता-जुलता है। अगर ऐसे graphics के साथ VR debugging का अनुभव मिल सके, तो codebase सीखने का इससे बेहतर तरीका शायद नहीं होगा।
    arbitrary code से 3D map generate करने पर कितना अच्छा experience बनाया जा सकता है, यह जानने की उत्सुकता है।

  • अगर यह 48 घंटे से भी कम समय की vibe coding का परिणाम है, तो संदेह है कि content सच में accurate है या नहीं। क्या इससे गलत निष्कर्षों या आधे-अधूरे ज्ञान की ओर जाने का खतरा नहीं है?

    • पूरी तरह पक्का तो नहीं कह सकता, लेकिन इसे बनाने वाला व्यक्ति Postgres को काफी अच्छी तरह जानता है
    • उत्सुकता है कि यहां से कोई specific चीज पता चली या सीखी गई क्या। मुझे तो यह brutalist-style सजावटी वस्तु जैसा लगता है।
    • आजकल LLM की accuracy इतनी खराब नहीं है।
  • "Rendering The First Frame..." का "Reticulating Splines..." न होना यकीन करना मुश्किल है। UI cool है।

  • मुझे Postgres internals काफी अच्छी तरह पता हैं, फिर भी यह उलझाने वाला लगा। screen बहुत busy है, समझना मुश्किल है, और कम से कम speed कम करने वाला button हो तो अच्छा होगा।

    • bottom-left में pause और speed को 0.1x तक adjust करने वाले दो buttons हैं। city के कुछ elements पर click करके values adjust की जा सकती हैं, और मैंने transactions/s में भी देखा।
  • देखने में सच में शानदार है। कुछ हफ्ते पहले से मैंने Beam VM के लिए Beam वाला Doom vibe coding करना शुरू किया है, जिसमें factory floor की तरह घूमते हुए modules और functions के connections, execution load और चिंगारियां छोड़ती errors देखी जा सकें।
    अभी बहुत ज्यादा नहीं बना पाया हूं, लेकिन VR headset खरीदने का बहाना बनाने के लिए इसे आगे develop करते रहना चाहता हूं।

  • लगता है यह AI की मदद से बनाया गया है। मैंने भी AI का इस्तेमाल करके catastrophic forgetting समझाने वाला मिलता-जुलता vibe coding project किया था।
    अब अगर सच में कुछ सीखना हो, तो AI की मदद कभी भी मिल सकती है—यह संतोषजनक है। पहले अच्छा material ढूंढना मुश्किल था, लेकिन अब bottleneck material नहीं, बल्कि व्यक्ति की focus और initiative बन गया है।