第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用 GoLang 編寫可靠的數(shù)據(jù)存儲(chǔ)

用 GoLang 編寫可靠的數(shù)據(jù)存儲(chǔ)

Go
慕容3067478 2021-07-30 15:01:08
我一直在構(gòu)建一個(gè)簡單的數(shù)據(jù)存儲(chǔ),作為我將要為教育目的構(gòu)建的文檔數(shù)據(jù)庫系統(tǒng)模塊的一部分。為了可靠地存儲(chǔ)數(shù)據(jù),我必須遵守 ACID 屬性。下面顯示的是我的保存方法。func (document Document) Save() (hash string, err error) {    if err := os.MkdirAll(document.FileDirectory(), 0600); err != nil {        return "", err    }    file, err := os.Create(document.TmpFile())    if err != nil {        return "", err    }    file.Write(document.Data)    if err := file.Sync(); err != nil {        return "", err    }    file.Close()    if err := os.Rename(document.TmpFile(), document.File()); err != nil {        return "", err    }    return document.Hash(), nil}首先將數(shù)據(jù)(以 []byte 表示)保存到一個(gè)臨時(shí)文件中。然后與該文件同步file.Sync()以確保將數(shù)據(jù)寫入持久存儲(chǔ)。然后臨時(shí)文件被重命名為新文件。注意:我選擇的存儲(chǔ)數(shù)據(jù)文件的方式是 spoolDir 格式。這意味著從數(shù)據(jù)生成的散列的前兩個(gè)字符用作父目錄名稱。哈希的以下兩個(gè)字符用作后續(xù)目錄名稱。文件名將是剩下的 36 個(gè)字符。臨時(shí)文件只有一個(gè).tmp與文件路徑和文件名相同的后綴。這種設(shè)計(jì)的靈感來自于如何git存儲(chǔ)數(shù)據(jù)。問題:我實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)算法的方式是否足以確保數(shù)據(jù)可靠地持久化。
查看完整描述

1 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

您正在做的事情保證了操作系統(tǒng)和硬件所保證的持久性(這是您可以獲得的最好的結(jié)果)。


它也是原子的;不完整的寫入不會(huì)留下不完整的數(shù)據(jù),即使 CPU 著火。


重命名失敗時(shí),您可能希望刪除臨時(shí)文件:


if err := os.Rename(document.TmpFile(), document.File()); err != nil {

    os.Remove(document.TmpFile()) // ignore errors

    return "", err

}


查看完整回答
反對 回復(fù) 2021-08-02
  • 1 回答
  • 0 關(guān)注
  • 200 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)