文件管理系统 - 数据库设计

问题描述 投票:3回答:5

我用Java编写自己的Document Management System (DMS)(可用的那些不能满足我的需求)。

这些文件应由合格的DublinCore元数据标准描述。在我看来,最简单的方法是将键值对打包在带有XML表示的RDF模型中。

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

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

由于(许多)文档彼此链接,第一种方法可能更好地分析数据,但第二种方法可能更快。

你会推荐哪种解决方案?或者有更好的解决方案吗?

斯特凡

java database-design document-management
5个回答
1
投票

我不知道你的分析是如何工作的,但是如果你需要内存中的完整图形来进行分析,那么使用variante 1(将所有文档的所有元数据存储在一个XML文件中),因为你将无法获得收益(但仅限于额外的工作)来自这个场景中的variante 2。

添加

如果变体2的额外工作量不多,那么我推荐变体2,因为它可以更具可扩展性。

  • 您可以通过只写一个小的xml文件而不是一个巨大的文件来更新或添加文档元数据
  • 它取决于你使用的xml解析器,但在某些情况下,解析一些较小的xml文件比一个较大的xml文件更快(但这很大程度上取决于数据的ammout)。

1
投票

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

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


1
投票

顺便说一句:即使它不属于你的问题:看看像JCR这样的JackRabbit(Java Content Repository)实现。您可以使用它来存储文档,也可以使用元数据。


0
投票

我会查看像Couch DB这样的NO SQL文档解决方案,看看它是否可以帮到你。

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


0
投票

如果您总是访问所有文档,那么您的方法都不会慢于另一个。但我会推荐第二种方法。在分析数据时,您需要阅读所有文档,因此如果它们位于不同的文件或一个文件中则没有区别......

© www.soinside.com 2019 - 2024. All rights reserved.