2011-01-12 86 views
3

我正在用Java编写我自己的Document Management System (DMS)(可用的不满足我的需求)。文档管理系统 - 数据库设计

的文件应由合格DublinCore元数据标准进行描述。在我看来,最简单的方法是使用XML表示将键值对包装在RDF模型中。

要存储我有两个想法的所有文件的元数据(文档文件将被存储在文件系统):

  1. 存储所有文件的所有元数据在 XML文件
  2. 制作一个XML文件每个文档并将其存储在文件系统或RDBMS中(如H2数据库引擎的Java),键值数据库不会解决此问题,因为一个文档的键不是唯一的。

由于(许多)文档彼此相连,所以第一种方法可能会更好地分析数据,但第二种方法可能会快得多。

您会推荐哪种解决方案?还是有更好的解决方案?

斯特凡

回答

1

我不知道你的分析工作,但如果您需要内存中的完整图形来进行分析,请使用variante 1(将所有文档的所有元数据存储在一个XML文件中),因为在这种情况下,您将无法从variante 2获得增益(但只有额外的工作)。

添加

如果变种2这些额外的工作不是很多,那么我建议变种2,因为它可以更calable。

  • 你可以更新或只写一个小型的XML文件,而不是一个巨大的一个
  • 这取决于你用什么XML解析器添加文档元数据,但在某些情况下,更快地分析一些较小的XML文件比一个巨大的文件(但这很大程度上取决于数据的大小)。
+0

因为我喜欢DOM解析器我将使用第二个差异,谢谢 – Stefan 2011-01-12 19:20:38

0

我会考虑像沙发DB一个NO SQL文档解决方案,看看它是否能帮助你。

我不喜欢文件系统解决方案;没有任何抽象可以帮助你。

0

如果您总是访问所有文档,您的任何方法都不会比其他方法慢。但我会推荐第二种方法。当涉及到分析数据,你需要阅读所有的文件,所以没有区别,如果它们是在不同的文件中或在一个文件...

1

你有没有使用MongoDB的GridFS的和考虑? http://www.mongodb.org/display/DOCS/GridFS+Specification

您可以在MongoDB中直接存储你的文件为二进制,甚至存储相关的元数据在任何你想要的格式,该文件。即使它们具有相同的名称,它也能够存储文档,并且会生成它自己的唯一ID。

+0

我不想将文档文件存储在数据库中,因为我希望能够在没有任何中间件的情况下访问它们。 – Stefan 2011-01-12 19:21:57

1

顺便说一句:即使它不属于你的问题:看看JCR(Java内容库)的实现,如JackRabbit。你可以用它来存储你的文档,也可以用你的元数据。

+0

感谢您的链接,我以前不知道这个规范,但它似乎很有趣。 – Stefan 2011-01-12 19:17:52