2008-09-04 69 views
1

我有一个简单的应用程序的想法,它将监视一组文件夹,索引它找到的任何文件。 gui将允许我快速标记新文件并将它们移动到单个数据库中进行存储,还可以通过标记,名称,文件类型和日期提供查询数据库的简单机制。目前,我在一对移动硬盘上拥有大约100多GB的文件,数据库至少会有这么大。如果可能,我想支持嵌入式二进制和文本文档的全文搜索。这将是一个单用户应用程序。BLOB存储 - 100 + GB,MySQL,SQLite或PostgreSQL + Python

没有试图启动数据库战争,但是什么开源数据库将最适合我?我很确定SQLLite不在桌面上,但我可能是错的。

回答

2

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

0

我总是讨厌回答“不要”,但是你最好用Lucene(PyLucene)之类的东西索引。几乎总是建议将路径存储在数据库中而不是文件内容。为了补充说明,这些数据库引擎都不会将LOB存储在单独的数据空间中(它们将嵌入到表的数据空间中),因此这些引擎中的任何一个都应该执行得差不多(除了sqllite以外)。您需要迁移到Informix,DB2,SQLServer或其他平台以获取这种二进制对象处理。

2

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

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

0

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

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

  • 将整个文件读入内存
  • 变换文件中查询(这通常意味着十六进制编码它的 - 因而加倍从开始时的大小)
  • 执行生成的查询(其本身是指 - 为对数据库 - 它具有解析它)

我会去用一个简单的DB和相关的文件使用命名约定存储, kes他们很容易找到(例如基于主键)。当然这个设计不是“纯粹的”,但它会表现得更好,而且使用起来也更容易。

-1

为什么你在浪费时间来模拟文件系统应该能够处理的事情?更多的存储+ grep是你的答案。

+0

呃,显而易见。每个<2MB的100GB文件至少为50,000个文件。搜索那么多文件的文件系统目录会比搜索元数据数据库表慢得多。 – djangofan 2009-07-27 19:51:42

1

我的偏好是将文档与元数据一起存储。一个原因是关系完整性。您不能轻松地移动文件或修改文件,而不需要由数据库斡旋的操作。我确信我可以处理这些问题,但它并不像我想的那么干净,我的经验是,大多数供应商现在可以在数据库中处理大量的二进制数据。我想我很想知道PostgreSQL或MySQL在这些领域有什么明显的优势,我主要是熟悉Oracle。无论如何,感谢你的回应,如果数据库知道外部文件的位置,如果需要,也可以很容易地在稍后的日期提交文件。问题的另一个方面是,如果任何一个数据库在使用Python时更容易使用。我假设这是一个洗涤。