【问题标题】:When would you store metadata on a filesystem rather than a database?您何时将元数据存储在文件系统而不是数据库上?
【发布时间】:2011-10-06 20:05:02
【问题描述】:

我想将带有元数据的文档存储在 Web 应用程序中,以便人们可以在层次结构中查看它们。

我认为执行此操作的典型方法是为每个文档创建一个数据库条目,将元数据存储在数据库中并将文件存储在文件系统中。

在文件系统上存储文档和元数据似乎更加简单和快捷。所以一个目录可能看起来像这样

$ ls subdirectory
.json
Subsubdirectory
bar.pdf
bar.json
foo.tex
foo.json

然后我可以从 json 文件(或我使用的任何格式)中获取元数据。我可以根据 subdirectory/foo.json 的内容来渲染 subdirectory/foo.html。我可以根据 subdirectory/.json 的内容和其他子 json 文件的内容来渲染 subdirectory.html。

我想到的主要缺点是可能更难根据元数据文件的内容进行搜索(尽管我可以根据文件系统级元数据进行搜索)。还有哪些其他缺点?如果人们确实使用这种方法,为什么我没有听说过呢?

编辑:我不太关心搜索;如果我构建某种搜索,它可能会在一个小目录中。

【问题讨论】:

    标签: database metadata


    【解决方案1】:

    “我可以根据文件系统级元数据进行搜索”——你可以这样做,但这意味着每次进行搜索时,你都必须从 FS 读取所有元数据文件,然后你必须手动处理它。没有索引,这大致相当于 SQL 数据库中的全表扫描(但速度更慢..)。

    一般而言,将数据存储在 FS 上还有其他一些缺点,您必须同时进行复制以实现持久性(这样您就不会在磁盘死机时丢失文件),以及如果您的站点是 popupar 以实现可扩展性。但是由于您已经将文件存储在磁盘上,所以无论如何您都必须解决这个问题。

    【讨论】:

    • 除了搜索功能之外,如果我已经使用文件系统存储文档,您似乎对存储元数据的数据库和文件系统方法漠不关心。我的看法准确吗?
    • 您还必须管理两组权限——一组在数据库中,一组在文件系统中——并保持它们或多或少同步。
    • 我肯定会使用mongoDB 来存储json。如果您必须搜索或向所有节点添加额外信息,请不要将其存储在 FS 上。如果您存储大量文件或流量很大,那么再次,不要将其存储在 FS 上。
    • 我认为我不需要更改文件系统权限。我将授予网络用户对相关目录的读写权限,并将帐户存储在数据库中,就像元数据在数据库中一样。
    • 我实际上是用 mongo 编写的,使用 gridfs 来存储文件,但我觉得在 mongo 中编写路径结构很奇怪(尽管这是一种公认​​的方法groups.google.com/forum/#!topic/mongodb-user/PhCktAndbLQ)。也许我应该坚持下去。
    猜你喜欢
    • 2011-06-24
    • 2021-10-12
    • 2019-09-25
    • 2012-08-14
    • 2012-05-08
    • 2010-10-14
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多