1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Engula云原生存儲(chǔ)引擎

        聯(lián)合創(chuàng)作 · 2023-09-27 11:47

        Engula 是一款全新的存儲(chǔ)引擎,旨在幫助工程師們更加從容地構(gòu)建可靠、高性?xún)r(jià)比的數(shù)據(jù)庫(kù)。設(shè)計(jì)目標(biāo)如下:

        • 云原生,把存儲(chǔ)引擎的計(jì)算、緩存、日志和文件等組件分離,使得各個(gè)組件能夠按需使用云上的彈性資源

        • 智能化,根據(jù)業(yè)務(wù)負(fù)載對(duì)底層的存儲(chǔ)結(jié)構(gòu)進(jìn)行自我優(yōu)化

        • 可擴(kuò)展,提供靈活的 API 讓用戶(hù)更加方便地實(shí)現(xiàn)自己的業(yè)務(wù)邏輯

        • 平臺(tái)中立,支持靈活的部署方式,在物理機(jī)、私有云和公有云環(huán)境都能很好的運(yùn)行

        Engula 是用于下一代數(shù)據(jù)基礎(chǔ)架構(gòu)的云原生存儲(chǔ)引擎。旨在以最低的成本在云平臺(tái)上提供可靠和高性能的服務(wù)。云平臺(tái)提供可以按需配置的彈性資源,這為重新構(gòu)建存儲(chǔ)引擎以利用它提供了廣泛的機(jī)會(huì)。為了實(shí)現(xiàn)這一目標(biāo),Engula 從頭開(kāi)始??設(shè)計(jì),以充分利用這些平臺(tái)上的彈性資源。

        Engula 將經(jīng)典存儲(chǔ)引擎的組件拆分為單一功能單元。例如,有些單元負(fù)責(zé)數(shù)據(jù)存儲(chǔ),有些單元負(fù)責(zé)命令執(zhí)行。每個(gè)單元都是一個(gè)輕量級(jí)的容器,運(yùn)行在一個(gè)節(jié)點(diǎn)上,并在該節(jié)點(diǎn)上擁有一定數(shù)量的資源。節(jié)點(diǎn)由運(yùn)行平臺(tái)提供,構(gòu)成統(tǒng)一的資源池為單元提供服務(wù)。也就是說(shuō),Engula 可以看作是一個(gè)整體提供存儲(chǔ)服務(wù)的單元編排系統(tǒng)。

        Engula的設(shè)計(jì)原則如下:

        • 首先使其簡(jiǎn)單可靠,然后使其具有成本效益和高性能。
        • 使其足夠智能,只需最少的操作和配置。
        • 避免平臺(tái)未內(nèi)置的外部依賴(lài)項(xiàng)。

        目前 Engula 還處于非常早期的階段;可查看路線(xiàn)圖以了解更多詳情。

        use std::sync::Arc;
        
        use engula::{
            Database, FileSystem, JobRuntime, LocalFileSystem, LocalJobRuntime, LocalJournal, LocalStorage,
            Options, StorageOptions,
        };
        
        #[tokio::main]
        async fn main() -> Result<(), Box<dyn std::error::Error>> {
            let options = Options {
                memtable_size: 1024,
            };
            let storage_options = StorageOptions::default();
            let dirname = "/tmp/engula";
            let fs = LocalFileSystem::new(dirname)?;
            let fs: Arc<Box<dyn FileSystem>> = Arc::new(Box::new(fs));
            let job = LocalJobRuntime::new(fs.clone());
            let job: Arc<Box<dyn JobRuntime>> = Arc::new(Box::new(job));
            let storage = LocalStorage::new(storage_options, fs, job)?;
            let journal = LocalJournal::new(dirname, false)?;
            let db = Database::new(options, Box::new(journal), Box::new(storage)).await;
            for i in 0..1024u64 {
                let v = i.to_be_bytes().to_vec();
                db.put(v.clone(), v.clone()).await?;
                let got = db.get(&v).await?;
                assert_eq!(got, Some(v.clone()));
            }
            Ok(())
        }
        瀏覽 20
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人国产一区二区三区精品麻豆 | 娇妻被邻居脔到高潮呻吟小说 | 伊人春色在线 | www.caoporn | 久久九九精品久久 | 办公室大尺度做爰 | 日韩欧美网站 | 97人妻精品一区二区三区 | 车上疯狂做爰 | 国产野外精品人成A片一区二区 |