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

时间:2018-11-19 22:01:53

标签: mysql sql redis database-performance

我有一个允许解析文件的应用程序。假设他们想解析1GB的CSV文件。应用程序的工作方式是存储文件的5MB预览-文件中仅存储前5MB的数据,并允许他们向其应用设置,例如:separator是什么,{ {1}}等,

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

quotechar

通过这种方式,每当用户要保存新设置时,我们都会将转换应用于所存储的- file_id (id) - filename (varchar) - file_url (varchar) - [various file settings] - data (longtext or blob)

但是,我看到了两个问题:

  1. 该行本身将非常大,并且这样存储起来可能会更好:

    data

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

    file

    • file_id(FK)
    • 数据

通过这种方式,仅当我直接查询该表时,我才需要加载所有数据。

  1. 通过网络(无论是链接还是Blob)加载5MB数据花费的时间很短。为此,我正在考虑为file_data使用redis缓存之类的东西,但最终我需要 ton 的空间。

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

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

1 个答案:

答案 0 :(得分:0)

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

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