پالت فرمان

دنبال فرمانی برای اجرا بگردید…

ZarynZaryn
معماری·۲ دقیقه مطالعه

مدل اشیا

## انواع اشیا تاریخچهٔ یک مخزن zev از سه نوع شیء ساخته می‌شود: - **بلاب‌ها**: محتوای یک فایل در یک لحظه. - **درخت‌ها**: فهرست یک پوشه؛ مجموعه‌ای تخت از ورودی‌های (نام، هش، اندازه) که به بلاب‌ها (یا برای زیرپوشه‌ها، به درخت‌های دیگر) اشاره می‌کنند. - **کامیت‌ها**: اشاره‌گری به یک درخت، اشاره‌گری به کامیت پیشین (والدش)، یک نویسنده، یک زمان و یک پیام. هر کدام از این‌ها با هش محتوای خودش شناخته می‌شود، همان‌طور که در [ذخیره‌سازی با نشانی‌دهی محتوایی](/docs/fa/content-addressing) آمده است. ## چیدمان ذخیره‌سازی محلی در کلاینت، اشیا در `.zev/objects/` قرار دارند؛ هر کدام با zstd فشرده و با هش SHA-256 خودش نام‌گذاری می‌شود. ارجاع‌ها (اشاره‌گرهای نام‌دار به کامیت‌ها، مثل سر شاخه‌ها) در `.zev/refs/` هستند. ## چیدمان ذخیره‌سازی سرور در سرور، اشیا روی دیسک در مسیری قرار دارند که بر پایهٔ دو نویسهٔ اول هش BLAKE3 آن‌ها بخش‌بندی شده است (تا هیچ پوشه‌ای تعداد نامعقولی فایل نداشته باشد)، و در کنارشان جدول‌های PostgreSQL نگه می‌دارند هر شیء به کدام مخزن تعلق دارد. برای فایل‌های قطعه‌بندی‌شده هم یک پوشهٔ موازی `manifests` هش کل فایل را به فهرست مرتب هش قطعه‌هایش نگاشت می‌کند. ## مانیفست‌های ارسال یک ارسال فقط اشیا را بارگذاری نمی‌کند؛ مانیفستی هم بارگذاری می‌کند که آن‌ها را توصیف می‌کند: یک سند JSON که برای هر شیء در تاریخچهٔ ارسال‌شده، `local_hash` آن (هویت SHA-256 در کلاینت) و `server_hash`ی را که واقعاً با آن ذخیره شده (BLAKE3) فهرست می‌کند. خود این مانیفست به‌صورت یک ارجاع (`manifest/<branch>`) ذخیره می‌شود و سابقه‌ای ماندگار و قابل بازپخش به سرور می‌دهد از اینکه یک ارسال دقیقاً کدام اشیا را آورد و دو هویتشان چگونه با هم متناظرند. ## بازسازی، نه جایگزینی مدل اشیا در طول توسعهٔ zev دو بار گسترش یافت (یک بار برای فشرده‌سازی و یک بار برای قطعه‌بندی) و در هر دو بار گسترش به شکلی افزایشی ساخته شد. فشرده‌سازی شیوهٔ نگه‌داری بایت‌ها روی دیسک را تغییر داد، بی‌آنکه آنچه یک هش شناسایی می‌کند تغییر کند. قطعه‌بندی راه دیگری برای سرهم‌کردن بایت‌های یک فایل افزود، بی‌آنکه هش خود فایل عوض شود یا خواننده‌های موجود اصلاً لازم باشد از وجود قطعه‌بندی خبر داشته باشند.