0

我一直在思考这个问题(你知道,程序员往往会做危险的事情)并且我一直在想,我们如此习惯的存储数据的方法真的那么高效吗?回答这个问题的麻烦在于我真的没有任何东西可以与之比较,因为它是我唯一使用过的东西。

我不是指 FAT 或 NTFS 或特定类型的文件系统,我指的是整个文件系统结构。我们只是习惯于在“文件夹”中考虑“文件”,就像我们的硬盘驱动器是一个巨大的文件柜。这是一个很好的类比,事实上,当我们这样想时,它会更容易学习,但它真的是描述程序及其各自部分的最佳方式吗?

我想知道是否有人可以想到(或知道)一种数据存储技术,该技术可用于存储数据以供操作系统使用,以不同的方式组织数据的各个部分。有什么……不同的东西存在吗?

4

12 回答 12

6

电子邮件通常存储在文件夹中。但是自从我迁移到 Gmail 后,我已经习惯于使用标签对我的电子邮件进行分类。

我经常想知道我们是否可以这样管理整个文件系统:您可以使用您喜欢的标签来标记文件,而不是将文件存储在文件夹中。文件标识符不会像这样:

/home/john/personal/contacts.txt

但更像这样:

contacts[john,personal]

嗯......只是深思熟虑(也许这已经存在!)

于 2009-02-04T15:30:26.473 回答
3

例如,您可以拥有专门的解决方案,例如Oracle Raw Partitions。其他数据库支持类似的东西。在这些情况下,文件系统提供了不必要的开销并且可以省略 - 数据库软件将负责组织结构。

该问题似乎非常依赖于应用程序,并且文件/文件夹似乎是许多应用程序的合理折衷方案(并且人类很容易理解)。

于 2009-02-04T15:21:50.890 回答
3

大型机过去只是为程序员提供了许多“设备”来使用。该设备对应于驱动器或其分区,程序员负责组织其上的所有数据。当然,他们很快建立了库来帮助解决这个问题。

我认为唯一使用平面文件(如 UNIX)的常见分层排列的操作系统是PICK。它使用一种关系数据库作为文件系统。

于 2009-02-04T15:22:22.027 回答
1

微软最初计划为 windows vista 引入一个新的文件系统(WinFS - windows future storage)。这个想法是将所有内容存储在关系数据库(SQL Server)中。据我所知,这个项目从未(或尚未?)完成。

维基百科上有更多关于它的信息。

于 2009-02-04T15:25:01.693 回答
1

我认识一个人,他的博士论文写了一个带有自己文件系统的硬盘。它基于 SCSI 命令的扩展,允许通常的打开、读取、写入和关闭命令直接发送到磁盘,绕过操作系统的文件系统驱动程序。我认为结论是它不灵活,并且不会增加多少效率。

无论如何,我相信这个基于磁盘的文件系统仍然有一个类似文件夹的结构,所以我认为它对你来说并不重要;-)

于 2009-02-04T15:25:58.900 回答
0

好吧,总是有Pick,其中操作系统和文件系统是一个集成的数据库。

于 2009-02-04T15:21:13.683 回答
0

如果您知道所需文件的名称(包括其路径),则传统文件系统已针对快速文件访问进行了优化。目录是将文件组合在一起的一种方式,如果您知道文件的属性但不知道其实际名称,则更容易找到它们。

如果您对文件知之甚少,传统文件系统并不擅长查找文件,但是它们足够强大,可以在它们之上添加一层以帮助基于内容或元信息(如标签)检索文件。这就是索引器的用途。

底线是我们需要一种方法来持久存储 CPU 需要执行的字节。所以我们有传统的文件系统,它们非常擅长组织顺序的字节集。我们还需要持久存储不直接执行但被执行的东西使用的文件字节。为什么要为相同的基本事物创建一个新系统?

除了存储和检索字节之外,文件系统还应该做什么?

于 2009-02-04T15:25:10.447 回答
0

我会回应其他回应。如果我可以选择一种文件系统类型,我个人更愿意看到一种混合方法:子树的平面数据库,其中每个子树都被视为一个内聚单元,但如果您将子树本身视为离散单元,它们将没有层次结构,但是相反,可以有元数据 + 可以在该元数据上查询。

于 2009-02-04T15:28:05.853 回答
0

文件的原因是人们喜欢将名称附加到他们必须使用的“事物”上。否则,就很难谈论或思考甚至区分它们。

当堆上的东西太多时,我们喜欢将堆分开。我们通过某种方式对其进行排序,并且我们喜欢构建层次结构,您可以在其中导航任意大小的事物。

因此,目录和文件只是映射了我们处理真实对象的自然方式。因为您可以将任何内容放入文件中。在 Unix 上,甚至硬件也被映射为“设备节点”到文件系统中,这些文件系统是特殊文件,您可以读/写这些文件以向硬件发送命令。

我认为这个比喻是如此强大,它会留下来。

于 2009-02-04T15:31:31.603 回答
0

我花了一段时间试图提出一个自动版本控制的文件系统,它可以维护任何特定文件和/或目录结构的版本(和版本历史)。

这个想法是所有标准访问命令(例如 dir、read 等)都将具有一个可选的日期/时间参数,当文件系统查看该时间点时,可以传递该参数以访问文件系统。

我已经走了很远,但是当我不得不真正出去赚钱时,我不得不放弃它。从那以后,它一直处于次要地位。

于 2009-02-04T15:33:27.387 回答
0

如果您查看操作系统的启动时间,应该清楚可以改进访问磁盘。我不确定更改应该在文件系统中还是在操作系统启动代码中。

于 2009-02-04T15:34:00.663 回答
0

就个人而言,我真的很抱歉 WinFS 没有飞起来。我喜欢这个概念。来自维基百科(http://en.wikipedia.org/wiki/WinFS):

WinFS 包括一个用于存储信息的关系数据库,并允许在其中存储任何类型的信息,只要该类型有明确定义的模式。然后可以通过关系将各个数据项关联在一起,这些关系要么由系统根据某些属性推断,要么由用户明确说明。由于数据具有明确定义的模式,因此任何应用程序都可以重用数据;并且使用这些关系,可以有效地组织和检索相关数据。因为系统知道信息的结构和意图,所以它可以用来进行复杂的查询,从而可以对数据进行高级搜索,并通过利用它们之间的关系来聚合各种数据项。

于 2009-02-04T16:16:51.073 回答