جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1 شمشیرهای پایگاه داده واقعی - جهانی ها - مدت هاست شناخته شده اند، اما هنوز تعداد کمی از آنها می دانند چگونه از آنها به طور موثر استفاده کنند یا اصلاً صاحب این ابرسلاح نیستند.

اگر از جهانی ها برای حل آن مشکلاتی که واقعاً در آنها خوب هستند استفاده کنید، می توانید به نتایج برجسته ای برسید. چه در بهره وری و چه در ساده سازی حل مشکل (1, 2).

Global ها روش خاصی برای ذخیره و پردازش داده ها هستند که کاملاً متفاوت از جداول در SQL هستند. آنها در سال 1966 در این زبان ظاهر شدند اوریون) (توسعه تکاملی - کش ObjectScript، از این پس COS) در پایگاه داده پزشکی است و هنوز وجود دارد به طور فعال استفاده می شودو همچنین در برخی از حوزه‌های دیگر که قابلیت اطمینان و عملکرد بالا مورد نیاز است نفوذ کرد: امور مالی، تجارت و غیره.

جهانی ها در DBMS های مدرن از تراکنش ها، ورود به سیستم، تکثیر و پارتیشن بندی پشتیبانی می کنند. آن ها می توان از آنها برای ساخت سیستم های مدرن، قابل اعتماد، توزیع شده و سریع استفاده کرد.

جهانی ها شما را به مدل رابطه ای محدود نمی کنند. آنها به شما آزادی می دهند تا ساختارهای داده ای را توسعه دهید که برای کارهای خاص بهینه شده اند. برای بسیاری از برنامه‌ها، استفاده هوشمندانه از جهانی‌ها واقعاً می‌تواند یک سلاح مخفی باشد و عملکردی را ارائه دهد که توسعه‌دهندگان برنامه‌های ارتباطی فقط می‌توانند رویای آن را داشته باشند.

گلوبال ها به عنوان راهی برای ذخیره داده ها می توانند در بسیاری از زبان های برنامه نویسی مدرن چه سطح بالا و چه سطح پایین استفاده شوند. بنابراین، در این مقاله من به طور خاص روی جهانی ها تمرکز خواهم کرد، نه به زبانی که زمانی از آن آمده اند.

2. جهانی ها چگونه کار می کنند

بیایید ابتدا درک کنیم که جهانی ها چگونه کار می کنند و نقاط قوت آنها چیست. جهانی ها را می توان از دیدگاه های مختلف مورد بررسی قرار داد. در این قسمت از مقاله به آنها به عنوان درخت نگاه می کنیم. یا مانند انبارهای داده سلسله مراتبی.

به بیان ساده، جهانی یک آرایه پایدار است. آرایه ای که به طور خودکار در دیسک ذخیره می شود.
تصور چیزی ساده تر برای ذخیره داده ها سخت است. در کد (در زبان‌های COS/M) فقط در نماد با یک آرایه انجمنی معمولی متفاوت است ^ قبل از نام

برای ذخیره داده ها در یک جهانی، نیازی به یادگیری زبان پرس و جوی SQL ندارید؛ دستورات کار با آنها بسیار ساده است. آنها را می توان در یک ساعت یاد گرفت.

بیایید با ساده ترین مثال شروع کنیم. درخت تک سطحی با 2 شاخه. نمونه ها در COS نوشته شده اند.

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"



هنگام درج اطلاعات در یک جهانی (فرمان Set)، 3 چیز به طور خودکار اتفاق می افتد:

  1. ذخیره داده ها روی دیسک
  2. نمایه سازی آنچه در پرانتز است کلید است (در ادبیات انگلیسی - "زیرنویس")، و در سمت راست برابرها مقدار ("مقدار گره") است.
  3. ترتیب دادن داده ها بر اساس کلید مرتب شده اند. در آینده، هنگام عبور از آرایه، اولین عنصر "Sergey Smith" و دومین عنصر "John Sidorov" خواهد بود. هنگام دریافت لیستی از کاربران از سراسری، پایگاه داده زمان مرتب سازی را تلف نمی کند. علاوه بر این، می‌توانید خروجی یک لیست مرتب شده را درخواست کنید، که از هر کلید شروع می‌شود، حتی از کلیدی که وجود ندارد (خروجی از اولین کلید واقعی شروع می‌شود که بعد از کلید ناموجود می‌آید).

همه این عملیات ها با سرعت باورنکردنی انجام می شود. در رایانه خانگی خود مقادیری تا 750 درج در ثانیه را در یک فرآیند دریافت می کردم. در پردازنده های چند هسته ای مقادیر می توانند به آن برسند ده ها میلیون درج / ثانیه

البته، سرعت درج خود چیز زیادی نمی گوید. به عنوان مثال، می توانید اطلاعات را به سرعت در فایل های متنی بنویسید - مانند این شایعه شده پردازش ویزا کار می کند. اما در مورد جهانی‌ها، در نتیجه یک ذخیره‌سازی نمایه‌شده ساختاریافته دریافت می‌کنیم که در آینده می‌توان به راحتی و به سرعت با آن کار کرد.

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

  • بزرگترین نقطه قوت جهانی ها سرعتی است که می توان گره های جدید را با آن وارد کرد.
  • داده ها در جهانی همیشه نمایه می شوند. پیمودن آنها، هم در یک سطح و هم در اعماق درخت، همیشه سریع است.

اجازه دهید چند شاخه دیگر از سطوح دوم و سوم را به جهانی اضافه کنیم.

Set ^a("+7926X", "city") = "Moscow"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "London"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

بدیهی است که درختان چند سطحی را می توان بر اساس جهانی ها ساخت. علاوه بر این، دسترسی به هر گره به دلیل نمایه سازی خودکار در حین درج تقریباً آنی است. و در هر سطحی از درخت، همه شاخه ها بر اساس کلید مرتب شده اند.

همانطور که می بینید، اطلاعات را می توان در هر دو کلید و مقدار ذخیره کرد. طول کل کلید (مجموع طول همه شاخص ها) می تواند برسد 511 بایتو ارزش ها 3.6 MB برای کش تعداد سطوح درخت (تعداد ابعاد) 31 است.

نکته جالب دیگر. شما می توانید بدون تعیین مقادیر گره های سطوح بالا یک درخت بسازید.

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3

دایره‌های خالی گره‌هایی هستند که هیچ ارزشی ندارند.

برای درک بهتر جهانی ها، بیایید آنها را با درختان دیگر مقایسه کنیم: درختان باغ و درختان نام سیستم فایل.

بیایید درختان جهانی را با آشناترین ساختارهای سلسله مراتبی برای ما مقایسه کنیم: با درختان معمولی که در باغ ها و مزارع رشد می کنند، و همچنین با سیستم های فایل.

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

همانطور که در درختان باغ می بینیم، برگ ها و میوه ها فقط در انتهای شاخه ها یافت می شوند.
سیستم های فایل - اطلاعات فقط در انتهای شاخه ها ذخیره می شود که نام فایل های کاملاً واجد شرایط هستند.

و اینجا ساختار داده جهانی است.

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1تفاوت ها:

  1. گره های داخلی: اطلاعات در یک جهانی را می توان در هر گره، نه فقط در انتهای شاخه ها ذخیره کرد.
  2. گره های خارجی: جهانی باید مقادیر مشخصی در انتهای شاخه ها داشته باشد، در حالی که FS و درختان باغ اینگونه نیستند.



از نظر گره های داخلی، می توان گفت که ساختار جهانی، ابرمجموعه ای از ساختار درختان نام در سیستم های فایل و درختان باغ است. آن ها انعطاف پذیرتر

به طور کلی، جهانی است درخت مرتب شده با قابلیت ذخیره داده ها در هر گره.

برای درک بهتر کار جهانی ها، تصور کنید چه اتفاقی می افتد اگر سازندگان سیستم های فایل از رویکردی مشابه جهانی ها برای ذخیره اطلاعات استفاده کنند؟

  1. حذف یک فایل منفرد در یک دایرکتوری، به طور خودکار دایرکتوری را حذف می کند، همچنین همه دایرکتوری های پوشاننده که فقط حاوی یک دایرکتوری هستند که به تازگی حذف شده اند.
  2. نیازی به دایرکتوری ها نخواهد بود. به سادگی فایل هایی با زیر فایل و فایل های بدون فایل فرعی وجود خواهند داشت. اگر با یک درخت معمولی مقایسه شود، هر شاخه به یک میوه تبدیل می شود.

    جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

  3. مواردی مانند فایل های README.txt ممکن است مورد نیاز نباشد. هر چیزی که باید در مورد محتویات دایرکتوری گفته شود می تواند در خود فایل دایرکتوری نوشته شود. در فضای مسیر، نام فایل از نام دایرکتوری قابل تشخیص نیست، بنابراین فقط با فایل‌ها می‌توان از آن استفاده کرد.
  4. سرعت حذف دایرکتوری ها با زیرشاخه ها و فایل های تو در تو به طور چشمگیری افزایش می یابد. بارها در Habré مقالاتی در مورد طولانی و دشوار بودن حذف میلیون ها فایل کوچک وجود داشته است (1, 2). با این حال، اگر یک سیستم فایل کاذب روی یک جهانی بسازید، چند ثانیه یا کسری از آن طول می کشد. وقتی حذف زیردرخت‌ها را روی یک رایانه خانگی آزمایش کردم، 1-96 میلیون گره را از یک درخت دو لایه روی یک HDD (نه SSD) در 341 ثانیه حذف کردم. علاوه بر این، ما در مورد حذف بخشی از درخت صحبت می کنیم، و نه فقط کل فایل با globals.

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1
حذف زیردرخت یکی دیگر از نقاط قوت جهانی هاست. برای این کار نیازی به بازگشت نیست. این به طرز باورنکردنی سریع اتفاق می افتد.

در درخت ما این را می توان با دستور انجام داد کشتن.

Kill ^a("+7926X")

جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 1

برای درک بهتر اینکه چه اقداماتی در سراسر جهان برای ما در دسترس است، جدول کوتاهی ارائه خواهم کرد.

دستورات و توابع اولیه برای کار با جهانی ها در COS

تنظیم
تنظیم شاخه ها به یک گره (اگر هنوز تعریف نشده است) و مقادیر گره

ادغام کردن
کپی کردن یک درخت فرعی

کشتن
حذف یک درخت فرعی

ZKill
حذف مقدار یک گره خاص درخت فرعی بیرون آمده از گره لمس نمی شود

$Query
پیمایش کامل درخت، رفتن به اعماق درخت

$Order
عبور از شاخه های یک گره خاص

$Data
بررسی اینکه آیا یک گره تعریف شده است یا خیر

افزایش $
افزایش اتمی یک مقدار گره. برای اجتناب از انجام خواندن و نوشتن، برای ACID. اخیراً توصیه شده است که به آن تغییر دهید $Sequence

با تشکر از توجه شما، ما آماده پاسخگویی به سوالات شما هستیم.

سلب مسئولیت: این مقاله و نظرات من در مورد آن نظر من است و هیچ ارتباطی با موضع رسمی InterSystems Corporation ندارد.

توسعه جهانی ها شمشیرهای گنج برای ذخیره داده ها هستند. درختان. قسمت 2. شما خواهید آموخت که چه نوع داده هایی را می توان در جهانی ها نمایش داد و در چه وظایفی حداکثر سود را ارائه می دهد.

منبع: www.habr.com

اضافه کردن نظر