为什么我们不用 git 当数据库呢?
source link: https://www.v2ex.com/t/897127
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
一行 sql 也没写过不知道为啥要用这玩意 blob tree grep awk 各种 pipe 倒是一点不怵 我感受不到任何 crud 比 git 更好用的(个人感受 github 就是拿 git 当数据库的, 对吧?(摆事实
第 1 条附言 · 11 小时 25 分钟前
一行 sql 也没写过不知道为啥要用这玩意
blob tree grep awk 各种 pipe 倒是一点不怵
我感受不到任何 crud 比 git 更好用的(个人感受
github 就是拿 git 当数据库的, 对吧?(摆事实
##补充一点儿:
我个人生产所以内容全都会 git 管理, 索引查询内容都会用正则表达式匹配
##意图:
这个帖子出发点出于“如果我自己不用, 我为什么要用在别人身上?”
likunyan 12 小时 15 分钟前 数据结构吧
|
qistchan 12 小时 14 分钟前 1 有用 svn 当数据库的
|
ql562482472 12 小时 13 分钟前 api 不好用
|
zoharSoul 12 小时 12 分钟前 1 以前有无数据库后端服务 很久很久很久以前
|
yohole 12 小时 11 分钟前 这应该是两个毫无相关的事情的吧,一时不知道怎么吐槽
|
hxndg 12 小时 11 分钟前 1 我对数据库的稳定性不太了解,不过单就 git ,我平均每周一次处理 git break 的事情。。。。
但是为啥会出问题到现在还没明白,都是阿里云的 ecs 实例,看日志也没啥事情。。。。 |
singerll 12 小时 10 分钟前 石头虽然也可以砸钉子,但跟锤子还是有区别的。
|
tool2d 12 小时 10 分钟前 我是觉得 sql 降低了一点门槛,让那些不怎么会编程的人,也能用用数据库,写写简单查询语句。
|
SuperMild 12 小时 8 分钟前 via Android 每个人都已经拿 git 当数据库了呀,广义来说一个文本文件都可以是一个数据库,如果你说这不算数据库,那么你就要说说你特指什么数据库了。
|
lakehylia 12 小时 6 分钟前 对对对,你说的对,你是这条街最靓的仔。
|
pierswu 12 小时 3 分钟前 因为你们如果用 git 做数据库,就要再自己做一套数据库底层,而且还不一定做的好
|
Mark24 11 小时 59 分钟前 1 建议了解下 git 底层原理、数据库底层原理。
这是 思而不学则殆。 |
SoulSleep 11 小时 51 分钟前 有道理,万物皆可数据库...
|
Bootis 11 小时 50 分钟前 钓鱼还是?
|
AlohaV2 11 小时 48 分钟前 git 会存一堆版本的 snapshot ,如果数据更新的频率比较高且数据量大,历史负担会非常重
|
rozbo 11 小时 48 分钟前 |
wangnimabenma 11 小时 48 分钟前 git 本来就是一个 K,V 库
你感觉不到 sql 的好只是你知道的还太少 |
sarices 11 小时 48 分钟前 2 当我知道原始人用绳结当数据库的时候我已经觉得有问题了,一行 sql 也没写过不知道为啥要用这玩意
|
lookStupiToForce 11 小时 42 分钟前 且不说这是两个层面的事情两种大类需求,或者 git 怎么实现 acid 、联表查询、索引树这些底层的玩意儿
单是 git 管理大量的代码或者大容量文件,不分片,你就要抓瞎吐血 不信你试试用 git 去管理一下上十 GB 的项目,或者去管理几个 GB 级的 csv ,或者几百上千个 10MB 级的 csv 这点数据量对任意数据库都是小 case ,对 git 而言就是开发中更新一下都谈不上效率更不可能用于生产 什么?你说给 git 加 feature 加额外的数据结构来实现这些需求?那我为什么不直接用数据库呢? 另外用于数据库版本管理的工具已经有了 -> flywaydb.org |
tusj 11 小时 39 分钟前 数据量小,业务简单(学生作业级,玩具 demo 级)怎么折腾都可以。想想数据库发明之前,反正就折腾嘛
数据量一大,要上生产,要事务,要并发,要多地热备,各种问题就来了 |
kalman03 11 小时 36 分钟前 你说的是 binlog 吧
|
wangnimabenma 11 小时 33 分钟前 @kalman03 #24 undo log
|
jewelz 11 小时 26 分钟前 安全无虞 性能捉急啊 商业数据库也要响应速度的啊
|
meeop 11 小时 24 分钟前 看业务,我觉得有些场景下可以
|
anlythree 11 小时 22 分钟前 我需要存下商品的价格和联系方式和名称和创建时间吧,然后需要随时查看最新的 10 条商品,,,用 git 怎么实现????
|
xgfan 11 小时 17 分钟前 via iPhone Git 怎么当数据库用?分支作为表,每个 commit 作为 key ,里面的 msg 作为值?我想象力不够……
难道你说的是把一个文本文件作为数据库? |
jasonkayzk 11 小时 16 分钟前 槽点太多,我竟然都不知道该怎么说了。🤯
|
JohnBull 11 小时 13 分钟前 我记得还有过拿 github 当网盘用的方案呢,后来被站方禁了
|
banmuyutian 11 小时 12 分钟前 一时无法分清是不是反串
|
JasonLaw 11 小时 9 分钟前 via iPhone 不好意思,我看不懂你在说什么。🤕
|
ljrdxs 11 小时 8 分钟前 关系型数据库的关系,你知道是什么吗?
|
weichengwu 11 小时 4 分钟前 |
ArianX 11 小时 1 分钟前 git 本身只对数据做版本控制,没有任何结构化组织数据、抽象数据的方式吧,因此不能叫做数据库。
当然如果只要能存数据就叫做数据库,那文本也能看作数据库。。 |
ArianX 10 小时 59 分钟前 github 也没有提供一个大的 git 仓库用来存取数据吧?只是把每个 git 仓库看作一个实体给用户展示。我猜 github 本身可能有单独的数据库用来存每个 git 仓库
|
gstqc 10 小时 56 分钟前 1 以前还有个帖子的老哥说,RDBMS 和 NoSQL 都是垃圾
自己写项目就用 txt 文档存数据呢 你这 git 有点落后了 |
wangxiaoaer 9 小时 40 分钟前 “github 就是拿 git 当数据库的, 对吧?(摆事实”
你不会以为 GitHub 的后台就是一个仓库一个文件夹就完事儿了吧。 |
iloveMonica 9 小时 39 分钟前 excel 也算数据库吧
|
superrichman 9 小时 33 分钟前 via Android @dacapoday 太酷了
|
nulIptr 9 小时 19 分钟前 我大一的时候就想到这个问题了,ini 也能存数据,要数据库干球
|
andyJado 8 小时 32 分钟前 @wangxiaoaer
@ArianX 但是你在 github 里面查看 blame 鸭, diff 鸭, commit history 鸭, 这些都是服务器端的 git 操作吧? 这些还能是 github 重写的逻辑? 如果不是的话, 那我用 git 做后台这些功能我就是相当于免费获得的嘛. |
wxf666 7 小时 53 分钟前 @andyJado 比如 V 站的 1K 个节点、60W 个用户、90W 个帖子、1200W 个回复,
以及每个用户的个人信息、所有提醒通知、虚拟货币消费历史, 还有每个帖子中某些用户的“感谢回复者”记录等, 怎么在 Git 里存储呢? 增删查改 节点、用户及个人信息、帖子、回复、提醒、消费 等,大概咋实现呢? |
idblife 7 小时 44 分钟前 via iPhone 太年轻呗,没见过世面
|
deplivesb 7 小时 37 分钟前 我看了下 op 的历史帖子和发言,我只能说。。。。不怕无知,就怕不知道自己无知
|
GeruzoniAnsasu 7 小时 30 分钟前 1 不如…… 你写几行 sql 就知道为什么了。
找本数据库教材的入门书,开头的例子就应该感受得到 1. 数据库不等于索引表 2. git 本身也使用了很复杂的数据结构和索引表来管理(甚至是二进制的)数据,与数据库系统有相通点,但完全是两种目的 3. 使用数据库系统的主要目的和关键特性是「关系」这个概念,我们提到数据库系统通常情况下都指的是关系型数据库,它能为现实需求的各种离散数据建立起相互映射,以便能从一套数据查询到另一套数据 4. 在「关系查询」的基础上,现代数据库做了无数无法想象的努力,从数据组织(压缩、值类型、存储优化)到查询算法(索引类型、SQL 、查询计划与优化、地理算法等特殊关系查询)再到网络和并发(事务 /ACID/日志、锁、「连接」: https://zh.wikipedia.org/zh-cn/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5 ) 绝大多数的特性都无法在数据库系统以外的系统中找到 ------ 教材一般会用这种例子: 建立班级表、学生表、成绩表,查询每班平均成绩,所有班级某成绩以上人数、某学生屡次考试成绩并倒序排列…… 考虑考虑吧 |
andyJado 7 小时 28 分钟前 @wxf666
git 本身有用户系统, 复用. 每个节点一个 submodule, 互不干扰, 每个帖子一个 commit obj, 每个‘回复(包括原贴)’ 都是一个 blob obj. 因为不需要文件系统所以不需要 tree obj? 这样可以完全避开系统调用, 所有事情只发生在.git/objects/里 |
ksedz 7 小时 23 分钟前 有类似思想的数据库
https://irmin.org A distributed database built on the same principles as Git SQL 还是强在足够表达力的基础上标准化程度高吧 |
SunsetShimmer 7 小时 21 分钟前 如果不考虑效率和实现难度,什么都可以当数据库。
Git 的主要功能是处理纯文本内容的版本管理(简单说就是增删内容),当然可以用于管理纯文本类型的数据。 当然,我们大可用纯文本把数据保存在一个 Git 仓库里,程序需要的时候就去读一下,还可以上传 Git 服务器备份呢。 (题外话,这种用纯文本文件做数据库的方法叫 DirtyDB ) 这么写的小项目确实跑的很愉快(甚至我有时都这么写),但在面临大规模用户使用(增删查改)的时候,可能会发生一些本来被数据库软件解决了的问题(例如队列、筛选、etc.)。 Git 的命令行输出可以用于查找更改的项目和内容,完全没问题,VSCode 的 Git 集成就是这么做的。 每次 Git 的执行都是独立的进程,问题来了,当我们的服务面临大量用户的时候,运行这些进程会不会造成一些有趣的混乱呢? |
SunsetShimmer 7 小时 20 分钟前 总结起来,这个思路可行,就是有点小~糟糕。
|
andyJado 7 小时 9 分钟前 |
wxf666 7 小时 1 分钟前 @andyJado
1. 怎么存储 用户 的 提醒通知(及其是否已读)、历史消费、收藏节点 /主题、关注 /block 的用户? 2. 怎么知道 帖子 有哪些 回复?(回复所属的帖子) 3. 怎么知道 某个回复 有哪些“感谢回复者”记录? 4. 怎么搜索 某个用户 所有帖子、回复? |
andyJado 7 小时 0 分钟前 @GeruzoniAnsasu
git 的数据结构一点不复杂哈,immute 三个半, 还有一个 mut 指针, 没啥了, 复杂度不在这吧. >它能为现实需求的各种离散数据建立起相互映射,以便能从一套数据查询到另一套数据 学习了学习了!🙇 |
kkwa56188 6 小时 48 分钟前 虽然 kv nosql 也可以叫数据库, 但正儿八经的数据库 是 关系数据库.
去 leetcode 里, 做完 三道简单的 "数据库" 的题目, 先. |
wxf666 6 小时 35 分钟前 @andyJado
以及,怎么确保『用户消费货币 和 用户发帖 /回复』同时发生或不发生?(防止突然断电、程序突然崩溃等) 这些都是最最最基础的数据库功能,连 1MB 的 SQLite 都能轻易实现 可能数据量太大(而且没有数据),你不好练习 可以去搜索一下『 SQL 经典 50 题』,一些基于『十来行学生、课程、教师、成绩数据』的各种查询,看看怎么用 Git 实现? |
8zip 6 小时 18 分钟前 via Android Json 也能当数据库的,csv 甚至 txt 也行
|
jim9606 6 小时 16 分钟前 你确实可以把 git 当数据库用,如果你了解 git 的底层实现,你就知道它底层其实就是一个 kv 数据库。
但是,如果你真的只是需要一个 kv 数据库而不需要 git 针对版本管理做的业务封装,一般都会有更好的选择。 真有点复杂度的业务不会纯拿 bash 和 coreutils 来写,因为数据处理和错误处理太蛋疼了,换成 python 都会省事些。但在业务不复杂的时候,shell 的低耦合易部署的好处就比较重要了。 你现在觉得 sql 没用,是因为你还没遇到达到那种复杂度的需求。 |
mikewang 6 小时 10 分钟前 via iPhone 1 这句话本身就有问题,就好比问“为什么我们不把牙医当作医生”一样(举个例子)。
因为牙医本身就是医生;而 Git 的核心本身也就是一个数据库。 数据库的范围可能比你想象的要大:即使你想“不用数据库”以文件存储处理数据,然而整个文件系统它也是一个数据库。 同样地,你不能把牙医当全科医生对待,也不能将 Git 当一般数据库用。不是没有可能,而是各有各的擅长之处。 |
Tink 6 小时 1 分钟前 via Android 为什么不用 excel 当数据库
|
DeWjjj 6 小时 0 分钟前 以前有文本流的,但是一旦东西多了必须上数据库。
不然数据的问题,会卡死你。 |
adoal 5 小时 5 分钟前 因为你构想出来的用 git 当数据库的场景都很简单。当业务需要复杂的查询和复杂的写入事务,你要给简单操作加上各种一致性约束和保障,加上各种索引,做各种在简单场景下可能是负面操作但复杂场景下反而是优化的设计,最后大概率重新发明关系数据库。
|
adoal 5 小时 0 分钟前 Unix pipe 串起来各种神操作,对于流式数据处理很好用。但在数据量大时,如果需要中途“倒车”,需要各种分组聚合,就麻烦大了。
|
adoal 4 小时 59 分钟前 按 V2 以前常看到劝人找个正经工作上班的说法……你先找个正经数据库作业做一遍看看呗。
|
msg7086 3 小时 2 分钟前 via Android git 本来就是一个数据库。再往前,svn 也是一个数据库。再往下,文件系统也是一个数据库。但是你跑业务可不只是要一个数据库。你平时用的是 rdbms ,关系型数据库,是表格型的,而且要符合 acid ,而且对数据完整性,并发性,查询速度以及读写性能都有很高的要求,git 这速度已经很慢了。你会主动选一个比 MySQL 慢 100 倍的数据库吗?
|
chengxiao 17 分钟前 我是受够了 拿 Github 当数据库的人了,一大堆人拿日记,小说往里灌内容,导致 github 的中文搜素,全是垃圾
|
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK