【问题标题】:For a tag database is it better to store filenames per tag or tags per filename?对于标签数据库,存储每个标签的文件名还是每个文件名的标签更好?
【发布时间】:2013-12-09 20:04:24
【问题描述】:

我想编写一个小应用程序来管理我的个人文件的文件标签。这将非常简单,但我不确定是否应该为每个唯一标签存储文件名,即:

"sharp":
file0.ext file1.ext file2.ext file3.ext

"cold":
file1.ext file2.ext

"ice":
file3.ext

或者如果我应该为每个文件名存储标签,即:

file0.ext:
"sharp"

file1.ext:
"sharp" "cold"

file2.ext:
"sharp" "cold"

file2.ext:
"sharp" "ice"

我想使用能给我带来最佳性能和/或最佳设计的方法。由于我从来没有做过这样的事情,我认为正确的方法可能不是最佳的。

只是为了提供有关该应用程序的更多信息:

  1. 我将按标签搜索文件。我所需要的只是能够输入我的标签,这样我就可以看到哪些文件匹配,然后双击打开它们等等。

  2. 我将使用 protobuffers(Marc 的版本)来保存和加载数据库。

  3. 数据库大小并不重要,因为我会在我的 PC 上使用它。

  4. 我认为我永远不会拥有超过 50K 的文件。我很可能最多有 20K,因为这些主要是个人文件,所以我不可能创建/收集更多。

编辑:我忘了提到另一个功能。由于这将是定义文件标签的同一个应用程序,因此当我选择一个文件时,我需要它来加载该文件具有的所有标签,以便在我想编辑它们时显示它们。

【问题讨论】:

    标签: c# tags protobuf-net


    【解决方案1】:

    如何搜索数据很重要...既然您说要按标签搜索文件,那么您的第一种方法将是最简单的,因为您只需要读取数据文件的一小部分.

    如果您真的想要简单,您可以为每个标签(即,sharp.txt、cold.txt、ice.txt)创建一个单独的数据文件,然后在文件中只包含一个文件名列表。

    【讨论】:

      【解决方案2】:

      如果您按标签搜索,那似乎是更合适的索引。查找文件上的所有标签可能会导致性能损失如果这是你需要做的事情。

      或者,如果您确实想支持任一方案:存储两者,您可以根据需要查询它们。这会产生一些数据重复,并且您需要额外的逻辑来在更改/添加文件时更新两个数据集,但它应该非常简单。

      【讨论】:

        【解决方案3】:

        在这种情况下,你有很多标签、很多文件和很多关系,我建议使用relational database。如果你没有很多数据,我认为你不应该关心它。

        无论如何,我想即使您确实想将关系保存在纯文本文件中,也适用与database normalization 相同的原则。主要目标是避免数据重复。在您的模型中,标签和文件将具有多对多关系。我会模仿关系数据库的结构,即使数据将存储在纯文本文件中。我将有一个文件保存文件名,每个文件名一个 ID,另一个文件保存标签,每个标签一个 ID。第三个文件将包含关系。简单,将文件保持在最小大小。

        希望我能帮上忙!

        【讨论】:

          猜你喜欢
          • 2018-08-21
          • 2021-06-05
          • 1970-01-01
          • 2019-05-27
          • 2019-03-09
          • 1970-01-01
          • 2012-12-20
          • 1970-01-01
          • 2015-09-09
          相关资源
          最近更新 更多