প্রকল্প সম্পর্কে

sled হলো Rust ভাষায় লেখা একটি এমবেডেড ডেটাবেস, যাকে এর লেখক বিটা সফটওয়্যার হিসেবে বর্ণনা করেছেন। এর API একটি থ্রেড-সেফ BTreeMap<[u8], [u8]>-এর মতো, তাই মৌলিক insert, get, range, remove এবং compare-and-swap অপারেশনগুলো Rust ডেভেলপারদের কাছে পরিচিত মনে হবে। README-তে তালিকাভুক্ত মূল ক্ষমতাগুলোর মধ্যে রয়েছে একাধিক কীস্পেস জুড়ে একাধিক কী অ্যাটমিকভাবে পড়া ও লেখার জন্য সিরিয়ালাইজেবল ACID ট্রানজেকশন, সম্পূর্ণ পারমাণবিক একক-কী অপারেশন, জিরো-কপি রিড, রাইট ব্যাচ, কী প্রিফিক্সে পরিবর্তনের সাবস্ক্রিপশন, একাধিক কীস্পেস, মার্জ অপারেটর, ফরোয়ার্ড ও রিভার্স রেঞ্জ ইটারেটর এবং ক্র্যাশ-নিরাপদ মনোটোনিক ID জেনারেটর। ঐচ্ছিক zstd কম্প্রেশন একটি বিল্ড ফিচারের পিছনে উপলব্ধ, যা ডিফল্টভাবে নিষ্ক্রিয়। বাস্তবায়নটিকে একটি লক-ফ্রি লগের উপর লক-ফ্রি পেজক্যাশের উপর লক-ফ্রি ট্রি হিসেবে বর্ণনা করা হয়েছে, যার স্টোরেজ ডিজাইন ফ্ল্যাশ-অপ্টিমাইজড লগ-স্ট্রাকচার্ড। এটি প্রিফিক্স এনকোডিং এবং সাফিক্স ট্রাঙ্কেশন-এর মতো b-tree কৌশল ব্যবহার করে, যা শেয়ার্ড প্রিফিক্সযুক্ত লম্বা কীগুলোর স্টোরেজ খরচ কমায়। README-তে দাবি করা হয়েছে LSM-ট্রি-সদৃশ রাইট পারফরম্যান্স এবং ঐতিহ্যবাহী B+ ট্রি-সদৃশ রিড পারফরম্যান্স, এবং উল্লেখ করা হয়েছে যে স্থায়িত্ব ডিফল্টভাবে প্রতি 500ms-এ একটি fsync-এর মাধ্যমে নিশ্চিত হয়, যা flush_every_ms বা ম্যানুয়াল flush/flush_async কলের মাধ্যমে কনফিগারযোগ্য। উল্লেখযোগ্য সতর্কতা: ট্রানজেকশনগুলো আশাবাদী (optimistic), তাই ট্রানজেকশন ক্লোজারগুলো বাহ্যিক অবস্থা বা IO এড়িয়ে চলা উচিত, যদি না সেগুলো আইডেমপোটেন্ট হয়; sled একাধিক খোলা ইনস্ট্যান্স সমর্থন করে না, তাই এটি প্রক্রিয়ার জীবনকাল ধরে খোলা থাকা উচিত; সাংখ্যিক কীগুলো সঠিক লেক্সিকোগ্রাফিক অর্ডারের জন্য বিগ-এন্ডিয়ান আকারে সংরক্ষণ করা উচিত; এবং 1.0.0-এর আগে অন-ডিস্ক ফরম্যাট পরিবর্তন হবে বলে আশা করা হচ্ছে, যার জন্য ম্যানুয়াল মাইগ্রেশন প্রয়োজন। README-তে আরও বলা হয়েছে যে নির্ভরযোগ্যতা প্রধান শর্ত হলে SQLite পছন্দনীয়, স্টোরেজ মূল্য-পারফরম্যান্স গুরুত্বপূর্ণ হলে RocksDB, এবং মাল্টি-প্রসেস ওয়ার্কলোডের জন্য যেখানে রাইট কম, সেখানে LMDB। সর্বনিম্ন সমর্থিত Rust সংস্করণ 1.62।