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

okxuctiv  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(785)

我有一个允许解析文件的应用程序。假设他们想要解析一个1gb的csv文件。这个应用程序的工作原理是它存储文件的5mb预览--只是文件中的前5mb数据--并允许他们对其应用设置,例如:什么 separator 是什么 quotechar 是等。
我的问题是存储这些数据的最佳方式是什么?我能想到的最简单的例子是:

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

这样,每当用户想要保存新设置时,我们都会将转换应用到 data 存储的。
然而,我看到了两个问题:
行本身将非常大,并且可能会像这样存储得更好: file 文件id(id)
文件名(varchar)
文件url(varchar)
[各种文件设置] file_data 文件id(fk)
数据
这样,只有直接查询该表时,才需要加载所有数据。
在网络上加载5mb的数据(无论是链接还是blob)需要相当长的时间。为此,我在考虑使用redis缓存之类的东西 file_id:5_mb_data ,但我最终需要大量的空间。
有什么好的方法来存储上面的内容,这样我就可以快速生成文件预览了?
我将文件存储在gcs上,为了获得任何文件(无论是完整文件还是5mb文件),我需要在本地下载。

4sup72z8

4sup72z81#

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

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

相关问题