是否可以将Git用作分层文本数据库?
显然,你必须编写一个可以充当中间人的前端,将用户命令转换为git命令。
记录对应于“文件”。在“文件”中,文本必须具有某种传统格式,如:
[name]: John Doe
[address]: 13 Maple Street
[city]: Plainview
要进行查询,您必须编写一个grep前端来使用git的搜索功能。
数据库本身就是存储库。
目录结构将是数据库的层次结构。
我看到的棘手部分是你希望记录在内存中,而不是通常在驱动器上的文件(虽然这是可能的)。因此,您必须配置git以处理实际位于db中间件内存中的虚拟文件系统中的文件。
有点疯狂,但有用吗?
潜在优势:
答案 0 :(得分:1)
是的,但它会非常缓慢而且不会涉及git。 git grep
和git clone
的功能在没有git
的情况下可用。
文件系统可以用作某些类型的数据库。实际上,git
本身使用文件系统作为简单,可靠,快速,健壮的键/值存储。对象4fbb4749a2289a3cd949ebe08255266befd18f23
位于.git/objects/4f/bb4749a2289a3cd949ebe08255266befd18f23
。 master
分支指向的位于.git/refs/heads/master
。
哪些文件系统数据库非常糟糕的是搜索这些文件的内容。如果没有索引,则必须每次都查看每个文件。您可以使用基本的Unix文件实用程序,例如find
和grep
。
此外,您必须解析每次搜索的文件内容,这些内容可能既昂贵又复杂。
并发成为一个严重的问题。如果多个进程想要同时处理更改,则必须复制整个存储库和工作目录,这非常昂贵。然后他们需要进行远程合并,也很昂贵,这可能会导致冲突。远程访问也存在同样的问题。
关于将文件存储在内存中,您的操作系统会为您处理此问题。它会将经常访问的文件保存在内存中。
解决具体问题......
所有记录都将使用SHA-1进行哈希处理,因此会有很高的完整性
这只会告诉您文件不同,或者有人篡改了历史记录。在数据库中,文件应该改变。它不会告诉您内容是否已损坏或格式错误,或者是正常更改。
git处理所有持久性问题
不确定这意味着什么。
像编辑这样的数据库操作可以作为git merges进行管理
他们是文件,编辑它们。我不知道如何合并。
合并意味着冲突,这意味着人为干预,而非数据库中您想要的东西。
记录删除等数据库操作可以作为删除(rm)
进行管理
如果每个单个文件都是记录,是的,但是你可以在没有git的情况下做同样的事情。
存储了对数据库的所有更改,因此您可以恢复任何更改或以前的状态
这是一个优势,它可以为您提供交易,但它也会使您的数据库写入速度极慢。 Git并不意味着每秒承诺数百次。
可以使用clone
制作数据库的副本
cp -r
做同样的事情。
简而言之,除非您使用非常简单的键/值存储,否则将文件系统用作数据库几乎没有什么优势。像SQLite或Berkeley DB这样的东西几乎在所有方面都很出色。