python - python中的数据结构 : maintaining filesystem structure within a database

标签 python database data-structures filesystems

我有一个数据组织问题。我正在处理一个客户端/服务器项目,其中服务器必须在驻留在服务器上的数据库中维护客户端文件系统结构的副本。这个想法是在 AJAX 化的 Web 界面中在服务器端显示文件系统内容。现在我只是将文件列表上传到数据库中,文件按顺序转储到数据库中。问题是一旦它们进入数据库,如何在服务器端重新捕获文件系统结构。通过遍历巨大的文件列表来在服务器端重建父->子结构似乎不可行。然而,当文件对象彼此没有引用时,这似乎是唯一的选择。

我不太确定如何处理这个问题。据我所知,我需要在服务器端(也许在 Btree 中?)复制某种类型的文件系统数据结构,其中对象维护指向其父项和/​​或子项的指针。我想知道是否有人有任何类似的过去经验可以分享,或者一些有用的资源可以为我指明正确的方向。

最佳答案

我建议遵循 Unix 方式。每个文件都被认为是一个字节流,仅此而已。每个文件在技术上都由一个名为 i-node( inode )的结构表示,该结构保存与数据的物理流相关的所有信息(包括属性、所有权等)。

inode 不包含任何关于可读名称的信息。每个 i-node 都被赋予一个唯一的编号(永远),作为文件的技术名称。您可以使用类似的数字来为数据库中的字节流提供唯一标识。 i 节点存储在磁盘上单独的连续部分中——想想 i 节点结构数组(抽象意义上),或者数据库中的单独表。

回到文件。这样它就由唯一的数字表示。对于您的数据库表示,数字将是唯一键。如果您需要其他 i-node 信息(文件属性),您可以将其他列添加到表中。一列将是 blob 类型,它将代表文件的内容(字节流)。对于 AJAX,我猜文件会相当小;因此,您应该不会对 blob 的大小限制有任何问题。

到目前为止,文件以平面结构的形式存储(就像物理磁盘和关系数据库一样)。

文件的目录名和文件名的结构分别保存在另一个文件中(保存在相同的结构中,与其他文件一起,也由它们的 i-node 表示)。基本上,目录文件捕获元组 (bare_name, i-node number)。 (这种方式在 Unix 中实现了硬链接(hard link)——两个名称与相同的 i-none 编号配对。)根目录文件必须具有固定的技术标识——即保留的 i-node 编号。

关于python - python中的数据结构 : maintaining filesystem structure within a database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554676/

相关文章:

python - virtualenv 和 virtualenv-3.4 之间的区别

python - 我最近更改了编译器路径以运行c++代码,但是现在我无法运行任何python代码。我该如何解决?

mysql - SQL如何根据给定条件进行选择?

actionscript-3 - 使用 Vector.<Object> 代替标准数组有什么优势吗?

algorithm - 如何将普通二叉树转换为 "smarter"二叉树,其中每个节点都知道其父节点、子节点总数和级别?

java - 类似字典的数据结构。这是一个好习惯吗?

python - 使用 OpenCV 或 Matplotlib 的图像选项卡

python - 如何最好地组织 Django 系统的规则组件?

mysql数据库设计: thread and reply of a reply?

mysql - 对于超过 3 个字节的字符,在将其保存到 Mysql 之前验证字符串