PGSimCity چیست و چرا مهم است
PGSimCity یک ابزار تصویری و متنباز است که داخلیات PostgreSQL را به یک شبیهسازی سهبعدی تعاملی در مرورگر تبدیل میکند. هدف اصلی این پروژه کاهش فاصلهٔ مفهومی میان کوئریهای سطح بالا و اجرای سطح پایین هسته است تا توسعهدهندگان بکاند، مهندسهای SRE و معماران دیتابیس بتوانند عملکرد و پاتولوژیهای واقعی را بهصورت بصری تحلیل کنند.
معماری تصویری: نقشهٔ شهر از داخل PostgreSQL
مدل اصلی PGSimCity داخلیات PostgreSQL را به نواحی شهری نگاشت میکند (تعاریف در src/world/layout.ts). این نگاشت به خوانایی و تحلیل ساختارهای داخلی کمک میکند.
نقشهبندی عناصر کلیدی
- اتصالات کلاینت از «آسمان شمالی» وارد سرپرست Postmaster میشوند و در امتداد خیابان backend فرایندهای worker ساخته میشوند.
- استخر shared_buffers بهصورت یک شبکهٔ مرکزی 1024 فریم نمایش داده شده و wal_buffers، ProcArray، جداول قفل و Commit Log (CLOG) کنار آن نقشهبرداری شدهاند.
- ذخیرهسازی شهری بر پایهٔ صفحات 8 کیلوبایت، درختهای B، نقشههای فضای آزاد (FSM) و نقشههای رویتپذیری (VM) مدلسازی شده است.
- نوشتن پیشاپیش (WAL) به ناحیهٔ شرقی «WAL» هدایت میشود؛ نخهای walwriter و walsender جریانهای تکرار را پخش میکنند، و در حیاط نگهداری غربی، checkpointer، bgwriter و autovacuum مستقر هستند.
برای مروری سریع روی PostgreSQL میتوانید به صفحهٔ ویکیپدیا مراجعه کنید: PostgreSQL در ویکیپدیا.
چگونه شبیهسازی پایدار نگه داشته میشود
رندرینگ با three.js از محاسبات حالت شبیهسازی جدا شده است. وضعیت شبیهسازی در ماشینهای حالت ایزولهٔ TypeScript (فایل src/sim/state.ts) با استفاده از ساختار SimState محاسبه میشود تا نوسانات نرخ فریم باعث ناهماهنگی وضعیت داخلی نشود. این رویه تضمین میکند نمایش گرافیکی تنها منعکسکنندهٔ وضعیت محاسبهشده باشد و منبع حقیقت در لایهٔ محاسبات باقی بماند.
شبیهسازی خطاها و سناریوهای عملیاتی
PGSimCity امکان تزریق پیکربندیهای خاص و مشاهدهٔ پیامدهای آنها را فراهم میکند. این قابلیت برای تمرین سناریوهای شکست، تحلیل عملکرد و آموزش عملی تیمهای عملیات مفید است.
نمونههای قابل شبیهسازی
- تنظیم
shared_buffersروی 16 MB که رقابت eviction در الگوریتم clock-sweep را فعال میکند و باعث میشود برخی بکاندها صفحات «قربانی» کثیف را قبل از خواندن دادهٔ جدید بنویسند. - محدود کردن
work_memکه گرههای اجرایی Sort و HashAggregate را مجبور به ریختن فایلهای موقتی درbase/pgsql_tmpمیکند. - تراکنشهای طولانی که افق
xminرا پایین میآورند، autovacuum را دچار کمبود میکنند و موجب تورم جدول میشوند. - انفجارهای نوشتن که «طوفانهای checkpoint» میسازند و pg_wal را با نوشتن صفحات کامل (FPW) پر میکنند — بهویژه وقتی از آستانهٔ
max_wal_size / (1 + checkpoint_completion_target)عبور شود.
PGlite و اجرای PostgreSQL در مرورگر
یکی از اجزای مهم پروژه، ادغام PGlite است که اجرای PostgreSQL درونحافظهای کامپایلشده به WebAssembly را مستقیماً در نخ کلاینت مرورگر ممکن میسازد. این رویکرد تجربهٔ تعاملی را واقعیتر میکند و اجازه میدهد رفتار موتور روی دادههای واقعی آزمایش و مشاهده شود.
واکنش جامعه و منشأ فنی
PGSimCity در Hacker News مورد بحث قرار گرفت و بازخوردهای متعددی دربارهٔ روشهای تصویریسازی معماری نرمافزار دریافت کرد. سازندهٔ پروژه، نیکولای ساموخوالوف، اعلام کرده نمونهٔ اولیه با کمک فرماندهی به مدلهای زبانی بزرگ شکل گرفت و سپس با کد منبع شاخهٔ REL_18_STABLE در PostgreSQL بهصورت دستی کالیبره شده است. بازخورد جامعه منجر به اصلاح رابط و ظهور پروژههای مشتق مانند CHSimCity برای ClickHouse شد.
مسیر فنی آینده
فایل ROADMAP.md چند اولویت فنی را فهرست میکند، از جمله:
- حالتهای تصویری برای پولینگ دستورات و تجمیع ارتباطات کلاینت.
- همراستا کردن مدل اندازهدهی حلقهٔ فریمهای بافر با قواعد پویا مانند
io_combine_limitوeffective_io_concurrencyدر PostgreSQL 18. - گسترش مسیرهای تعاملی پلان کوئری تا توسعهدهندگان بتوانند جریان اجرایی را قدمبهقدم دنبال کنند.
- پیادهسازی درگاههای تست جهش شبانه برای سختتر کردن موتور تأیید قطعی در برابر شاخهٔ بالادست REL_18_STABLE.
کد منبع، مستندات و مجموعههای تست پروژه روی GitHub منتشر شده و تحت مجوز Apache-2.0 قابل استفاده است.
چشمانداز کاربردی
PGSimCity فراتر از یک نمایش بصری ساده است؛ ابزار میتواند روش آموزش مهندسها و تیمهای زیرساخت را تغییر دهد، بستری برای تمرین سناریوهای شکست فراهم کند و محیطی برای بازتولید پاتولوژیهای پیچیدهٔ دیتابیس در اختیار پژوهشگران قرار دهد. انتظار میرود با توسعهٔ امکاناتی مانند نماهای پولینگ دستورات و پلانهای تعاملی، این پروژه به یکی از منابع مرجع برای تحلیل PostgreSQL تبدیل شود.
شروع سریع
برای دسترسی به کد، مستندات و راهنمای اجرای محلی یا در مرورگر، به مخزن پروژه در GitHub مراجعه کنید؛ فایلهای کاربردی مانند ROADMAP.md و مجموعههای تست در همانجا قرار دارند.





