1

我有一个简单的应用程序的想法,它将监视一组文件夹,索引它找到的任何文件。gui 将允许我快速标记新文件并将它们移动到单个数据库中进行存储,并且还提供了一种简单的机制来按标签、名称、文件类型和日期查询数据库。目前我在几个可移动硬盘驱动器上有大约 100+ GB 的文件,数据库至少会那么大。如果可能的话,我想支持嵌入式二进制和文本文档的全文搜索。这将是一个单用户应用程序。

不是想发起一场数据库大战,而是哪种开源数据库最适合我?我很确定 SQLLite 不在讨论范围内,但我可能是错的。

4

6 回答 6

2

为什么要将文件存储在数据库中?只需存储您的元数据和文件名。如果出于某种原因需要将它们复制到新位置,只需将其作为文件系统副本即可。

删除文件内容后,任何有能力的数据库都将能够处理数十万个文件的元数据。

于 2008-09-04T18:19:40.747 回答
2

我仍在为我自己的一个项目研究这个选项,但CouchDB可能值得一看。

于 2008-09-04T18:38:41.107 回答
1

我的偏好是将文档与元数据一起存储。原因之一是关系完整性。如果没有 db 代理的操作,您将无法轻松移动文件或修改文件。我确信我可以处理这些问题,但它并不像我想要的那样干净,而且我的经验是,如今大多数供应商都可以处理数据库中的大量二进制数据。我想我想知道 PostgreSQL 或 MySQL 在这些领域是否有任何明显的优势,我主要熟悉 Oracle。无论如何,感谢您的回复,如果数据库知道外部文件在哪里,如果我愿意,以后也可以很容易地将文件带入。问题的另一个方面是使用 Python 时是否更容易使用任一数据库。我假设那是洗头。

于 2008-09-04T18:42:19.163 回答
0

我总是讨厌回答“不要”,但最好使用 Lucene ( PyLucene ) 之类的东西进行索引。几乎总是建议将路径存储在数据库中而不是文件内容中。

除此之外,这些数据库引擎都不会将 LOB 存储在单独的数据空间中(它们将嵌入到表的数据空间中),因此这些引擎中的任何一个引擎的性能都应该几乎相同(除了 sqllite)。您需要迁移到 Informix、DB2、SQLServer 或其他软件来处理这种二进制对象。

于 2008-09-04T18:17:19.613 回答
0

几乎它们中的任何一个都可以工作(即使 SQLLite 不打算在并发多用户环境中使用,这可能是一个问题......)因为您不想索引文件的实际内容。

唯一的限制因素是给定数据库的最大“数据包”大小(通过数据包我指的是查询/响应)。通常这些限制在 2MB 左右,这意味着您的文件必须小于 2MB。当然你可以增加这个限制,但是整个过程效率很低,因为例如要插入一个文件,你必须:

  • 将整个文件读入内存
  • 在查询中转换文件(这通常意味着对其进行十六进制编码 - 因此从一开始就将大小翻倍)
  • 执行生成的查询(这本身意味着 - 对于数据库 - 它必须解析它)

我会使用一个简单的数据库和使用命名约定存储的相关文件,这使得它们易于查找(例如基于主键)。当然这种设计并不“纯粹”,但它会表现得更好,也更容易使用。

于 2008-09-04T18:21:56.760 回答
-1

你为什么要浪费时间模拟文件系统应该能够处理的东西?更多存储空间 + grep 是您的答案。

于 2008-09-04T18:39:19.280 回答