我一直在构建一个简单的数据存储,作为我将要为教育目的构建的文档数据库系统模块的一部分。
为了可靠地存储数据,我必须遵守 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
}
首先将数据(以 []byte 表示)保存到一个临时文件中。然后与该文件同步file.Sync()以确保将数据写入持久存储。然后临时文件被重命名为新文件。
注意:我选择的存储数据文件的方式是 spoolDir 格式。这意味着从数据生成的散列的前两个字符用作父目录名称。哈希的以下两个字符用作后续目录名称。文件名将是剩下的 36 个字符。临时文件只有一个.tmp与文件路径和文件名相同的后缀。这种设计的灵感来自于如何git存储数据。
问题:我实现数据存储算法的方式是否足以确保数据可靠地持久化。
UYOU
相关分类