使用git作为文本数据库?

时间:2016-03-19 01:15:41

标签: database git hierarchical-data

是否可以将Git用作分层文本数据库?

显然,你必须编写一个可以充当中间人的前端,将用户命令转换为git命令。

记录对应于“文件”。在“文件”中,文本必须具有某种传统格式,如:

[name]: John Doe
[address]: 13 Maple Street
[city]: Plainview

要进行查询,您必须编写一个grep前端来使用git的搜索功能。

数据库本身就是存储库。

目录结构将是数据库的层次结构。

我看到的棘手部分是你希望记录在内存中,而不是通常在驱动器上的文件(虽然这是可能的)。因此,您必须配置git以处理实际位于db中间件内存中的虚拟文件系统中的文件。

有点疯狂,但有用吗?

潜在优势:

  • 所有记录都将使用SHA-1进行哈希处理,因此会有很高的完整性
  • git处理所有持久性问题
  • 像编辑这样的数据库操作可以作为git merges进行管理
  • 记录删除等数据库操作可以作为删除(rm)
  • 进行管理
  • 存储了对数据库的所有更改,因此您可以恢复任何更改或以前的状态
  • 可以使用clone
  • 制作数据库的副本

1 个答案:

答案 0 :(得分:1)

是的,但它会非常缓慢而且不会涉及git。 git grepgit clone的功能在没有git的情况下可用。

文件系统可以用作某些类型的数据库。实际上,git本身使用文件系统作为简单,可靠,快速,健壮的键/值存储。对象4fbb4749a2289a3cd949ebe08255266befd18f23位于.git/objects/4f/bb4749a2289a3cd949ebe08255266befd18f23master分支指向的位于.git/refs/heads/master

哪些文件系统数据库非常糟糕的是搜索这些文件的内容。如果没有索引,则必须每次都查看每个文件。您可以使用基本的Unix文件实用程序,例如findgrep

此外,您必须解析每次搜索的文件内容,这些内容可能既昂贵又复杂。

并发成为一个严重的问题。如果多个进程想要同时处理更改,则必须复制整个存储库和工作目录,这非常昂贵。然后他们需要进行远程合并,也很昂贵,这可能会导致冲突。远程访问也存在同样的问题。

关于将文件存储在内存中,您的操作系统会为您处理此问题。它会将经常访问的文件保存在内存中。

解决具体问题......

  

所有记录都将使用SHA-1进行哈希处理,因此会有很高的完整性

这只会告诉您文件不同,或者有人篡改了历史记录。在数据库中,文件应该改变。它不会告诉您内容是否已损坏或格式错误,或者是正常更改。

  

git处理所有持久性问题

不确定这意味着什么。

  

像编辑这样的数据库操作可以作为git merges进行管理

他们是文件,编辑它们。我不知道如何合并。

合并意味着冲突,这意味着人为干预,而非数据库中您想要的东西。

  

记录删除等数据库操作可以作为删除(rm)

进行管理

如果每个单个文件都是记录,是的,但是你可以在没有git的情况下做同样的事情。

  

存储了对数据库的所有更改,因此您可以恢复任何更改或以前的状态

这是一个优势,它可以为您提供交易,但它也会使您的数据库写入速度极慢。 Git并不意味着每秒承诺数百次。

  

可以使用clone

制作数据库的副本

cp -r做同样的事情。

简而言之,除非您使用非常简单的键/值存储,否则将文件系统用作数据库几乎没有什么优势。像SQLiteBerkeley DB这样的东西几乎在所有方面都很出色。