تصور کنید دو کاربر بهصورت آفلاین یک فیلد را همزمان میسازند و ناگهان یکی از آنها برای همیشه غیب میشود. اگر در حال ساخت برنامههای اشتراکی هستید، احتمالاً با این کابوس «حذف داده» روبهرو شدهاید.
این مشکل ریشه در ساختار CRDT (انواع دادههای جایگزین بدون تضاد) دارد — شبیه گروهی از نویسندگان که هر کدام روی کاغذ جداگانهای مینویسند و بعد سعی میکنند بدون پاک کردن نوشتههای هم، همه را در یک صفحه جمع کنند. طبق گزارشهای فنی، این نقص در ابزارهایی مثل Yjs و Automerge هم دیده میشد. همانطور که در تحلیل قبلی ما دربارهی سیستمهای توزیعشده اشاره کردیم، مدیریت تضادها در حالت آفلاین همیشه چالشبرانگیز است.
در ۹ ژوئن ۲۰۲۶، Loro راهکاری به نام کانتینرهای ادغامپذیر (Mergeable Containers) را معرفی کرد تا این وضعیت رقابتی (Race Condition) را متوقف کند. به نقل از مستندات این پروژه، در حالتهای قدیمی، شناسهی هر شیء بر اساس عملیاتی بود که آن را میساخت؛ بنابراین اگر دو کاربر یک فیلد را میساختند، سیستم آنها را دو شیء متفاوت میدید و یکی را حذف میکرد.
Loro برای حل این مسئله، هویت را از وضعیت نمایش جدا کرده و دو لایهی مجزا تعریف کرده است:
- شناسههای قطعی (Deterministic CIDs): شناسهای که بر اساس جایگاه منطقی محاسبه میشود تا تمام کاربران به یک عدد یکسان برسند.
- نشانگرهای جایگاه نقشه (Map Slot Markers): یک علامت باینری در لایهی والد که تصمیم میگیرد کدام نوع داده در آن کلید نمایش داده شود.
بر اساس بررسی منابع متعدد، توسعهدهندگان اکنون باید از متدهای صریح مانند get_mergeable_text استفاده کنند. این APIها باعث میشوند سیستم بهطور خودکار مقادیر ساده را بازنویسی نکند.
این تغییر یعنی دیگر نیازی نیست تمام کانتینرهای احتمالی را در لحظه تولد سند بسازید. برنامهنویسان حالا میتوانند طرحهای پویا (Dynamic Schemas) را بدون ترس از دست رفتن دادهها بهصورت تنبل (Lazy) پیاده کنند.
گام بعدی شما
- اسکریپتهای بازتولید Loro را اجرا کنید تا ببینید آیا پیادهسازی فعلی شما آسیبپذیر است یا خیر.
- در صورت استفاده از ساختارهای تو در تو، متدهای جدید
mergeableرا جایگزین متدهای قدیمی کنید. - معماری دادههای خود را برای پشتیبانی از طرحهای پویا بازبینی کنید.
اما مدیریت حافظه در این ساختارهای توزیعشده حتی پیچیدهتر است — به تحلیل ما دربارهی بهینهسازیهای حافظه در سیستمهای Real-time مراجعه کنید.

گفتگو