آموزش پیشرفته EOS: بخش سوم – شاخص‌های ثانویه

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

0 86

به مجموعه مقالات توسعه‌ پیشرفته‌ EOS خوش آمدید. برای مطالعه بخش اول اینجا و برای مشاهده بخش دوم این آموزش اینجا را کلیک کنید.

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

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

شاخص‌های اولیه

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

تعریف ساختار

ابتدا باید ساختارمان را تعریف کنیم و این ساختار به primary_keyfunction نیاز دارد که در واقع همان شاخصی است که در هنگام فراخوانی (find(KEY استفاده می‌شود. در حال حاضر بگذارید برای این که کارمان یکتا شود از account_name استفاده کنیم. در بخش بعدی متد جامع‌تری را به شما معرفی خواهیم کرد.

ایجاد جدول

حالا که ساختارمان را تعریف کردیم می‌توانیم با استفاده از متد

جدول چند-شاخصه‌ای خود را از کتابخانه‌ EOS تعریف کنیم:

بعد از نوشتن typedef می‌توانیم به سادگی مرجعی تعریف کرده و بعد جدول خود را در بخش سازنده (Constructor) اجرا کنیم، یا مرجع را در هر تابعی که به آن نیاز داریم اجرا نماییم.

شاخص‌های ثانویه

حالا بگذارید عملکرد جدول خود را با افزودن شاخصی ثانویه به آیتم‌های fetch از طریق مالک نسبیِ آن بسط دهیم. ساختار آیتم ما به شکل زیر درمی‌آید:

خط

که آن را در بالای شاخص primary_key اضافه کردیم، تابعی است که مقدار فراخوانی‌شده‌ ownerwhen را برمی‌گرداند.

تعریف شاخص ثانویه

بگذارید شاخص ثانویه را در جدول چند-شاخصه‌ خود تعریف کنیم تا بعداً بتوانیم به آن دسترسی داشته باشیم:

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

این همان خطی است که شاخص ثانویه‌ ما را تعریف می‌کند. ما برای مشخص کردن شاخص namedbyowner از

استفاده می‌کنیم.

  • INDEX_NAME می‌تواند هر چیزی که شما می‌خواهید باشد و لازم نیست از نظر نوشتاری با تابع get_owner همخوانی داشته باشد؛ فقط به خاطر داشته باشید که این نام همان نامی است که قرار است بعداً در عملیات‌های شاخص ثانویه از آن استفاده کنیم.
  • LOOKUP_FUNCTION_DEFINITION مثل

    شاخص ثانویه‌ی تابع را می‌سازد و آن را به تابعِ تعریفِ شاخص ما تخصیص می‌دهد.

استفاده از شاخص ثانویه

حالا مالک آیتم را شاخص‌گذاری کردیم، ولی چطور می‌توانیم از شاخص‌مان برای پیدا کردن آیتم‌هایی استفاده کنیم که متعلق به یک کاربر خاص است؟ برای انجام این کار باید وارد عمل شده و از متد get_index<INDEX_NAME>() استفاده کنیم. پس بگذارید یک action به نام inventory بسازیم تا آیتم‌های کاربر را دریافت کند.

حالا بگذارید ببینیم خط زیر چه کاری انجام می‌دهد:

این کد برای دریافت شاخصی که قبلاً تعریف کردیم، در تابع get_index از نمونه‌ی item_table استفاده می‌کند. حتماً توجه دارید که این‌جا مشغول استفاده از همان نام N) byowner) هستیم که قبلاً آن را به عنوان مرجع شاخص مورد نظر خود مشخص کرده بودیم.

حالا شاخص ثانویه را در اختیار داریم. اکنون می‌توانیم از همه‌ی توابعِ متداولی استفاده کنیم که قبلاً می‌توانستیم آن‌ها را در primary_index به کار ببریم. در این مثال ما از lower_bound استفاده کردیم، ولی شما می‌توانید بر اساس نیاز خود از find, get, upper_bound, begin یا end استفاده کنید.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.