我正在编写一个文档编辑网络服务,其中可以通过网站编辑文档,也可以在本地编辑文档并通过 git 推送。我正在尝试决定是否应该将文档作为单独的文档存储在文件系统或数据库中。我想知道的要点是:
- 如果它们在数据库中,git 有什么方法可以查看文档吗?
- 使用文件系统的开销要高多少?我认为操作系统正在做更多的工作。我怎样才能减轻这种情况?例如,网络编辑器自动保存,缓存保存数据的最佳方式是什么,以尽量减少写入?
- 一个规模显着好于还是差于另一个?如果一切按计划进行,这将是一项服务,可以访问和编辑数千份文档。
我正在编写一个文档编辑网络服务,其中可以通过网站编辑文档,也可以在本地编辑文档并通过 git 推送。我正在尝试决定是否应该将文档作为单独的文档存储在文件系统或数据库中。我想知道的要点是:
Filesystem 永远比 DB 快,因为毕竟 DB 是在 Filesystem 中存储数据的!
正如 github 上所证明的那样,Git 本身非常有效,所以我说你坚持使用 git,并解决它。
毕竟,Linus 应该知道一些事情...... ;)
如果文档进入数据库,git 不能直接看到文档。git 将看到数据库的后备存储文件,但无法将那里的更改与文件更改相关联。
正如 Carlos 所回答的,使用数据库的开销高于使用文件系统。数据库针对事务进行了优化,它们将在内存中执行,但它们必须命中文件。除非您对应用程序进行编程以在子文档级别执行数据库事务(例如:仅更改修改的行),否则数据库不会给您带来性能改进。大多数现代文件系统都进行缓存,您可以以一种位于 RAM 中的方式“写入”,而不是进入您的后备存储区。您需要管理应用程序中“自动保存”的粒度(每次更改?每 30 秒?5 分钟?),但实际上,以相同的粒度对数据库执行此操作会导致相同数量的流量到后备商店。
我想您打算问“文件系统是否像数据库一样扩展”?:) 如果您有某种方法来组织每个用户的文件,并且您发现特定用户只能访问/修改他们应该能够访问/修改的文件(这是可行的 imo)的安全问题,那么文件系统应该可行。