【问题标题】:How to store document in directory instead of database如何将文档存储在目录而不是数据库中
【发布时间】:2017-01-09 11:57:04
【问题描述】:

我有一个 MySQL 数据库,可用于电气测量。它还有一个表contracts 包含合约的参数,还有一个表documents 包含与特定合约对应的文档块:

+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| id          | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| contract_id | bigint(20) unsigned | YES  |     | NULL    |                |
| name        | varchar(512)        | YES  |     | NULL    |                |
| document    | longblob            | YES  |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+

用户从连接到数据库的程序中添加和检索文档。 最近数据库变得太大了,我想以文档为代价来减小它的大小。所以我猜想document 字段应该是对文件的文本引用。这个参考应该指哪里?它应该是共享文件夹吗?用户的程序如何访问这个地方?我问是因为我想知道在这种情况下最好的做法是什么。谢谢。

【问题讨论】:

  • 您是否使用任何脚本/编程语言进行数据输入?像 c、perl、ruby、python、php 等?
  • @marmeladze 用户程序是用 Qt4/C++ 编写的。
  • 好吧。创建一个存储文件夹并将文件写入那里。在好的情况下,用户的程序不会直接访问这里。你会接受它,写入一个临时文件夹,然后服务器处理程序将从 tmp 读取并写入最终目的地。我不擅长qt,但这里有相关答案-stackoverflow.com/questions/37067014/qt-upload-put-a-filestackoverflow.com/questions/16735595/…

标签: mysql blob storage


【解决方案1】:

许多程序员认为将文档(pdf、图像、文档、电子表格等)存储为文件而不是 dbms 中的 BLOB 是一种很好的做法。

您没有描述您的服务器环境,因此很难为您的存储建议一个目录结构。如果您现在使用多台机器来使用您的应用程序,或者您使用多台机器,您需要将这些文档放在共享文件系统上,所以所有您的机器可以从一个公共位置读取它们。

例如,您可能会在某个服务器上创建一个共享文件夹,然后将其挂载到运行您的应用程序的每台机器上

  /mnt/electricowizard/docs

在此之下,您可以像这样存储您的文档:

 /mnt/electricowizard/docs/cust_0001/2015/001.pdf
 /mnt/electricowizard/docs/cust_0001/2015/002.tif
 /mnt/electricowizard/docs/cust_0001/2015/contract003.docx
 /mnt/electricowizard/docs/cust_0001/2016/asbuilt001.jpg
 /mnt/electricowizard/docs/cust_0001/2016/asbuilt002.jpg

看到层次结构了吗?客户/年份/文件。这在多用户系统中通常是一个很好的结构,因为它可以让您为特定用户隔离东西。它还可以防止任何给定的文件系统目录需要保存太多的文件;这样做会导致效率低下,尤其是在 Windows 上。

在您的数据库表中,您可能有一个名为docpath 的列或其他名称。它将包含这样的值。

 /cust_0001/2015/001.pdf
 /cust_0001/2015/002.tif
 /cust_0001/2015/contract003.docx
 /cust_0001/2016/asbuilt001.jpg
 /cust_0001/2016/asbuilt002.jpg

文件系统的位置 (/mnt/electricowizard/docs/) 是程序的配置特征,文件系统中文档的位置是每个文档的特征。

当然,还有其他组织文档的方法。许多人使用他们认为的“图像”而不是“文档”来处理这个问题。这一事实应该有助于您搜索更多信息。

一个被广泛采用的例子:WordPress 的uploads 文件夹:

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2017-09-14
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多