برنامه نویسی

ReductStore نسخه 1.4.0 در Rust منتشر شد

خوشحالم که اعلام کنم ما انتقال از C++ به Rust را تکمیل کرده ایم و نسخه پایدار (v1.4.0) را منتشر کرده ایم که کاملاً به زبان Rust نوشته شده است. 🤩

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

شکستن تغییرات

متأسفانه، هنگامی که برنامه خود را با استفاده از یک پشته کاملاً متفاوت بازنویسی می کنید، حفظ رفتار یکسان آسان نیست. بنابراین، باید تغییراتی در API ایجاد شود. در نسخه C++، پاسخ‌های JSON با اعداد صحیح ارسال می‌شدند که به صورت رشته نمایش داده می‌شدند.

GET http://127.0.0.1:8383/api/v1/info
{
   "bucket_count":"1",
   "defaults":{
      "bucket":{
         "max_block_records":"1024",
         "max_block_size":"64000000",
         "quota_size":"0",
         "quota_type":"NONE"
      }
   },
   "latest_record":"1400081",
   "oldest_record":"1",
   "uptime":"6",
   "usage":"717458496",
   "version":"1.4.0-beta.2"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

من از Protobuf به عنوان یک سریال‌ساز باینری سریع برای ابرداده در موتور ذخیره‌سازی و سریال‌ساز JSON برای ارتباطات HTTP استفاده می‌کنم. پیاده‌سازی رسمی C++ Protobuf از رشته‌ها برای اعداد صحیح استفاده می‌کند، زیرا اعتقاد بر این است (و من موافقم) که جاوا اسکریپت نمی‌تواند اعداد صحیح بزرگ را به درستی مدیریت کند، حداقل نه خارج از جعبه. با این حال، زمانی که من به Prost!، اعداد صحیح به عنوان اعداد صحیح واقعی ارسال می شوند. من روی این تغییر در SDKهای کلاینت کار کردم، اما این تغییر همچنان یک تغییر اساسی است و برای هر گونه ناراحتی که ممکن است ایجاد کند عذرخواهی می کنم. من می توانم Rust نسخه v2.0 را صدا کنم، اما فرمت دیتا یکسان است و با هم سازگار هستند. بنابراین، تصمیم گرفتم نسخه اصلی را برای تغییراتی که سازگاری داده ها را مختل می کند ذخیره کنم و کاربران باید بر این اساس مهاجرت کنند.

پرس و جوهای مستمر

علاوه بر ایمنی و امنیت Rust، این نسخه پرس و جوهای مداوم را نیز فعال می کند. این به شما امکان می دهد در تغییرات جدید مشترک شوید و به طور مشابه با اشتراک MQTT یا Kafka کار می کند. اگرچه ممکن است جایگزین کاملی نباشد، واکنش سریع به تغییرات برای بسیاری از برنامه‌ها حیاتی است. همچنین می تواند برای ادغام ReductStore با سایر فناوری ها مفید باشد. برای مثال، می‌توانید در رکوردهای جدید مشترک شوید و برچسب‌های آن‌ها را برای ذخیره‌سازی طولانی‌مدت به پایگاه داده سری زمانی (TSDB) بفرستید. در اینجا یک مثال ساده پایتون آمده است که نشان می دهد چگونه می توان در تمام تغییرات ایجاد شده از این به بعد برای رکوردها با good برچسب برابر با True:

async for record in bucket.subscribe(
    "entry-1",
    start=int(time_ns() / 10000),
    poll_interval=0.2,
    include=dict(good=True),
):
    print(
        f"Subscriber: Good record received: ts={record.timestamp}, labels={record.labels}"
    )
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همه SDK های مشتری به روز می شوند

به دلیل تغییرات در API، SDK های خود را به نسخه 1.4.0 به روز کردیم. آنها کاملاً با آخرین نسخه ReductStore سازگار هستند. اینجا را چک کنید:

بعدی چیه؟

ما قبلاً نسخه 1.5.0 را برنامه ریزی کرده ایم و ویژگی های زیر را پیاده سازی خواهیم کرد:

  • دسته بندی رکوردهای کوچک در یک درخواست می تواند نوشتن و خواندن حباب های کوچک را کارآمدتر کند. #236
  • نقطه پایانی HEAD برای خواندن فراداده یک رکورد بدون دانلود محتوای آن.، #214
  • و Rust Client SDK!!!، #289

امیدوارم این نسخه برای شما مفید باشد. اگر سؤال یا بازخوردی دارید، دریغ نکنید که در Discord یا با باز کردن یک بحث در GitHub تماس بگیرید.

برای استفاده از ReductStore متشکریم!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا