我有一个简单的应用程序的想法,它将监视一组文件夹,索引它找到的任何文件。gui 将允许我快速标记新文件并将它们移动到单个数据库中进行存储,并且还提供了一种简单的机制来按标签、名称、文件类型和日期查询数据库。目前我在几个可移动硬盘驱动器上有大约 100+ GB 的文件,数据库至少会那么大。如果可能的话,我想支持嵌入式二进制和文本文档的全文搜索。这将是一个单用户应用程序。
不是想发起一场数据库大战,而是哪种开源数据库最适合我?我很确定 SQLLite 不在讨论范围内,但我可能是错的。
为什么要将文件存储在数据库中?只需存储您的元数据和文件名。如果出于某种原因需要将它们复制到新位置,只需将其作为文件系统副本即可。
删除文件内容后,任何有能力的数据库都将能够处理数十万个文件的元数据。
我仍在为我自己的一个项目研究这个选项,但CouchDB可能值得一看。
我的偏好是将文档与元数据一起存储。原因之一是关系完整性。如果没有 db 代理的操作,您将无法轻松移动文件或修改文件。我确信我可以处理这些问题,但它并不像我想要的那样干净,而且我的经验是,如今大多数供应商都可以处理数据库中的大量二进制数据。我想我想知道 PostgreSQL 或 MySQL 在这些领域是否有任何明显的优势,我主要熟悉 Oracle。无论如何,感谢您的回复,如果数据库知道外部文件在哪里,如果我愿意,以后也可以很容易地将文件带入。问题的另一个方面是使用 Python 时是否更容易使用任一数据库。我假设那是洗头。
我总是讨厌回答“不要”,但最好使用 Lucene ( PyLucene ) 之类的东西进行索引。几乎总是建议将路径存储在数据库中而不是文件内容中。
除此之外,这些数据库引擎都不会将 LOB 存储在单独的数据空间中(它们将嵌入到表的数据空间中),因此这些引擎中的任何一个引擎的性能都应该几乎相同(除了 sqllite)。您需要迁移到 Informix、DB2、SQLServer 或其他软件来处理这种二进制对象。
几乎它们中的任何一个都可以工作(即使 SQLLite 不打算在并发多用户环境中使用,这可能是一个问题......)因为您不想索引文件的实际内容。
唯一的限制因素是给定数据库的最大“数据包”大小(通过数据包我指的是查询/响应)。通常这些限制在 2MB 左右,这意味着您的文件必须小于 2MB。当然你可以增加这个限制,但是整个过程效率很低,因为例如要插入一个文件,你必须:
我会使用一个简单的数据库和使用命名约定存储的相关文件,这使得它们易于查找(例如基于主键)。当然这种设计并不“纯粹”,但它会表现得更好,也更容易使用。
你为什么要浪费时间模拟文件系统应该能够处理的东西?更多存储空间 + grep 是您的答案。