我有一个允许分析文件的应用程序。假设他们想解析一个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)
数据
这样,只有直接查询该表时,才需要加载所有数据。
通过网络(无论是链接还是blob)加载5MB数据需要非常长的时间。为此,我想为file_id:5_mb_data使用类似redis缓存的东西,但我最终需要大量的空间。
有什么方法可以很好地存储上述内容,以便快速生成文件预览?
我把文件存储在地面军事系统上,为了得到任何文件(不管是完整文件还是5MB),我需要在本地下载。

最佳答案

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

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

关于mysql - 如何在数据库中存储5MB文件预览,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53383261/

10-12 01:01
查看更多