我想写一个管理个人文件的文件标签的小应用程序。它会非常简单,但我不确定是否应该为每个唯一标签存储文件名,即:
"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"
我想使用能够提供最佳性能和/或最佳设计的方法。由于我从未做过这样的事情,我认为正确的方法可能不是最优的。
只是提供有关该应用的更多信息:
我会按标签搜索文件。我只需要能够输入我的标签,以便查看哪些文件匹配,然后双击打开它们等等。
我将使用protobuffers(Marc的版本)来保存和加载数据库。
数据库大小并不重要,因为我会在我的电脑上使用它。
我认为我的文件不会超过50K。我最有可能获得20K最大值,因为这些主要是个人文件,所以我不可能创建/收集更多。
答案 0 :(得分:1)
这一切都与您想要搜索数据有关...因为您说要按标签搜索文件,那么您的第一种方法将是最简单的,因为您只需要读取数据文件的一小部分
如果你真的想要简单,你可以为每个标签设置一个单独的数据文件(即sharp.txt,cold.txt,ice.txt),然后在文件中只有一个文件名列表。
答案 1 :(得分:1)
如果您按标签搜索,这似乎是更合适的索引。查找文件上的所有标记可能会导致一些性能损失,如果这是您需要做的事情。
或者,如果您确实要支持这两种情况:同时存储两者,您可以根据需要查询它们。这会创建一些数据重复,当更改/添加文件时,您需要额外的逻辑来更新两个数据集,但它应该非常简单。
答案 2 :(得分:1)
在这种情况下,你有很多标签,很多文件和很多关系,我建议使用relational database。如果您没有大量数据,我认为您不应该关心它。
无论如何,我想即使您确实想要保存纯文本文件中的关系,也应遵循database normalization中的原则。主要目标是避免数据重复。在您的模型中,标签和文件将具有多对多关系。即使数据存储在纯文本文件中,我也会模仿关系数据库的结构。我会有一个文件,其中包含文件名,每个文件名一个ID,另一个文件包含标签,每个标签一个ID。第三个文件将包含关系。简单,将文件保持在最小尺寸。
希望我帮忙!