👀 خبر در یک نگاه:
Aerospike کلاینت Rust خود را بهطور رسمی منتشر کرد تا برنامههای با عملکرد بالا و تاخیر کم را پشتیبانی کند. این کلاینت از مدل async-first، عملیات دستهای، ایندکسهای اولیه و ثانویه و ویژگیهای پیشرفتهای مانند تراکنشهای توزیعشده و TLS پشتیبانی میکند. |
Aerospike به طور رسمی کلاینت Rust خود را برای پشتیبانی از برنامههای با توان پردازشی بالا و تاخیر کم که با پایگاه داده NoSQL زمان واقعی آن تعامل دارند، منتشر کرده است.
زمینه و دلایل توسعه کلاینت
برایان پورتر (Brian Porter) از Aerospike توضیح میدهد که تصمیم به پذیرش رسمی کلاینت Rust که پیشتر توسط جامعه توسعهدهندگان پشتیبانی میشد، به دلیل افزایش استفاده از Rust برای ساخت برنامههای با توان پردازشی بالا و تاخیر کم در صنایع مختلفی مانند مالی، مخابرات، زیرساخت ابری و سیستمهای توکار گرفته شده است. او همچنین ادامه داد:
«سازمانهایی مانند آمازون، کلودفلر و دیسکورد از Rust برای ساخت زیرساخت قابلاعتماد و حذف دستههایی از باگهای مرتبط با حافظه که معمولا نرمافزارهای مبتنی بر C/C++ را تحت تاثیر قرار میدهند، استفاده کردهاند.»
ویژگیهای فنی
💡 کلاینت Rust مدل همزمانی async-first دارد که بین Tokio یا async-std قابل انتخاب است و برای محیطهای قدیمی، زیرکتابخانهای با API ورودی/خروجی بلوکهکننده ارائه میکند. نسخه ۲ از عملیات دستهای، خواندن، نوشتن، حذف و UDF پشتیبانی کرده و امکان جستجو با ایندکسهای اولیه و ثانویه را فراهم میکند. |
مدل اجرایی sync و async
کلاینت Rust مدل همزمانی async-first را به کار میبرد که به توسعهدهندهها اجازه میدهد بین کتابخانه Tokio یا async-std به عنوان پیادهسازی پایه انتخاب کنند. برای محیطهای قدیمی یا ترکیبی، یک زیرکتابخانه (Sub-crate) هم وجود دارد که API ورودی/خروجی را هنگام اجرا برنامه متوقف (بلوک) میکند تا عملیات کامل شود.
بهبودهای API و پروتکلها
علاوه بر عملیات اتمیک، کلاینت از دستورات دستهای برای کار روی چندین رکورد در یک فراخوانی پشتیبانی میکند. نسخه ۲ کلاینت پشتیبانی کامل از عملیات خواندن، نوشتن، حذف و UDF را اضافه کرده است. همچنین امکان جستجوی رکوردها با استفاده از ایندکسهای اولیه و ثانویه را فراهم میکند و از صفحهبندی و محدود کردن تعداد رکوردهای برگشتی پشتیبانی میکند.
سازندههای Expression
پشتیبانی از Expression Builders برای فیلترینگ و کوئری، مانند توابع record_size() و memory_size() که اندازه رکورد یا حافظه را محاسبه میکنند.
تبدیل دادهها
امکان تبدیل آسان بین مقادیر Aerospike و انواع داده Rust وجود دارد، که توسعه را سادهتر میکند.
پشتیبانی سیستمعامل
کلاینت با Linux، Mac OS X، و Windows سازگار است.
نسخههای سازگار
برای کار با کلاینت، نیاز به Rust 1.46+ و Aerospike v5.6+ وجود دارد.
ویژگیهای مهم دیگر
کلاینت Rust شامل پشتیبانی از سیاستهای نسخه تکثیر (Replica Policies) و محدودسازی سرعت (Throttling) و همچنین نمایشهای سطح بالا برای انواع مدل داده مثل Exists، OrderedMap و UnorderedMap است.
اجرای کوئری روی ایندکس اولیه
کد زیر بهصورت خلاصه نشان میدهد چگونه روی ایندکس اولیه کوئری اجرا کنیم تا رکوردهایی که شرط خاصی را دارند، بازیابی شوند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
let client = ... let mut policy = ScanPolicy::default(); policy.include_bin_data = false; match client.scan(&policy, “test”, “demo”, None) { Ok(records) => { // process the records }, Err(err) => println!(“Error fetching record: {}”, err), } |
ایجاد یک رکورد و اتصال به کلید
همینطور، اینگونه میتوانید یک رکورد ایجاد کنید و آن را به یک Key متصل کنید:
1 2 3 4 5 6 7 8 9 10 11 |
let key = as_key!(“test”, “myset”, “mykey”); let bin = as_bin!(“mybin”, “myvalue”); match client.put(&policy, &key, &vec![&bin]) { Ok(()) => println!(“Record written”), Err(err) => println!(“Error writing record: {}”, err), } |
محدودیتهای شناختهشده
در نقشه راه کلاینت Rust Aerospike ویژگیهای قدرتمند متعددی از جمله پشتیبانی از کوئریهای پارتیشن، تراکنشهای توزیعشده ACID، تضمین قوی سازگاری (Strong Consistency) و پشتیبانی کامل از TLS وجود دارد اما در حال حاضر محدودیتهایی روی نسخه موجود وجود دارد که میتوان به موارد زیر اشاره کرد:
- عدم پشتیبانی از Aggregation با UDFهای Lua: کوئریهای aggregation با استفاده از توابع تعریفشده توسط کاربر Lua هنوز پشتیبانی نمیشود.
- عدم پشتیبانی از TLS: اتصالات امن با TLS موجود نیست.
- عدم پشتیبانی از IPv6: پروتکل IPv6 پشتیبانی نمیشود، که برای شبکههای مدرن ممکن است محدودیت ایجاد کند.
نقشه راه و برنامههای آینده
- هدف parity ویژگیها: نسخه نهایی به دنبال parity کامل ویژگیها با SDKهای دیگر Aerospike مانند Go، Java و C# است.
- انتشار GA: برنامهریزی برای انتشار عمومی (General Availability) در اواخر ۲۰۲۵، با تمرکز بر بازخورد جامعه برای بهبودها.
- کلاینتهای دیگر: Aerospike همچنین کتابخانههای کلاینت دیگری برای کمک به توسعهدهندهها در ساخت برنامهها با پایگاه داده خود به شیوهای بومی ارائه میدهد، از جمله Node.js، Java، Python، C و غیره.
دیدگاهتان را بنویسید