如何在数据库中存储5MB的文件预览



我有一个允许解析文件的应用程序。假设他们想要解析一个1GB的csv文件。应用程序的工作原理是存储文件的5MB预览(仅为文件中的前5MB数据(,并允许他们对其应用设置,例如:separator是什么,quotechar是什么,等等。

我的问题是,存储这些数据的最佳方式是什么?我能想到的最简单的例子是:

- file_id (id)
- filename (varchar)
- file_url (varchar)
- [various file settings]
- data (longtext or blob)

通过这种方式,每当用户想要保存新设置时,我们都会将转换应用于存储的data

然而,我看到了两个问题:

  1. 行本身会非常大,可能会像这样存储得更好:

    file

    • file_id(id(
    • 文件名(varchar(
    • file_url(varchar(
    • [各种文件设置]

    file_data

    • file_id(FK(
    • 数据

这样,只有当我直接查询该表时,我才需要加载所有数据。

  1. 通过网络加载5MB数据(无论是链接还是blob(都需要花费大量时间。为此,我想为file_id:5_mb_data使用类似redis缓存的东西,但我最终需要ton的空间

什么是存储上述内容的好方法,以便我可以快速生成文件预览?

我将文件存储在GCS上,为了获得任何文件(无论是完整文件还是5mb(,我需要在本地下载。

正如Uueerdo所建议的,在本地存储文件的预览可能最有意义,例如名为md5_checksum的文件,以确保唯一性。这样,您就不必担心有一个位于中心的缓存(如redis(,打开和读取一个5MB的文件只需要大约1/1000秒:

>>> timeit.timeit("with open('5mbfile', 'r') as f: _=f.read()", number=1000) / 1000
0.0011376328468322755

最新更新