将数据库导出到平面文件的过程有多困难?完成导出需要几秒、几分钟、几小时还是几天?
除了以下内容,我对数据库结构一无所知:
- 它拥有约 50 万人中每个人的约 50 项数据。
- 数据比较简单。没有视频/图像/音频/文件,甚至没有大段文字。全是姓名、号码和日期。
- 数据库经过专业设计和管理。它是在现代硬件上运行的现代软件。运行这个的人是专业人士,而不是新手/爱好者/业余爱好者。这不是一个用胶带和口香糖维持生命的古老系统。
完整故事:我已向监管职业的政府组织提出信息自由请求。他们不希望我有数据。
该组织必须保留所有被许可人的目录,其中包括有关其身份、教育、资格和许可状态以及纪律记录的信息。当前和以前的姓名、执照号码、执照类别、执照颁发日期、他们接受培训的时间和地点,以及任何纪律问题的记号。
法律还要求公开该目录,并规定该机构可以收取合理的费用以向任何提出要求的人提供副本。该机构声称合理的费用约为 25,000 美元。人们是否认为生成一个包含 50 列左右和 50 万行的 CSV 文件需要几分钟以上的时间?
以上任何一项取决于所涉及的许多不同变量:
根据您提供的信息无法给出确切的答案,但让我们通过一些假设来模拟一个场景,以进行粗略估计。您提供了以下起点:
假设您使用的是 RDBMS SQL Server,带有一个非常典型的 SSD,读取速度约为 500 MB/s。我们还假设我们在这里谈论的是一张桌子。让我们分配表的列,其中 2/5 的列是
names
我们将使用的类型VARCHAR(50)
,2/5 的列是numbers
我们将使用的类型INT
,剩下的 1/5 是我们将使用dates
的类型我们将用于DATETIME
。我们还将假设这些names
列已被完全使用,以使数学计算更容易(这是我们整体粗略数学中的名义假设)。因此,将我们表中的 50 列加起来得到一行
(20 columns * 100 bytes for VARCHAR) + (20 columns * 4 bytes for INT) + (10 columns * 8 bytes for DATETIME) = 2,160 bytes total = ~2 KB
。如果我们将其乘以 500,000 人(假设每人 1 行),就可以粗略地得出1,000,000 KB = 1 GB
要导出的数据。因此,对于具有约 1 GB 数据的单个表,要从每秒约 500 MB 的 SSD 加载,应该只需要几秒钟就可以从磁盘读取数据。那么就会有其他的瓶颈。例如,如果网络带宽是
1 Gigabit = 125 MB/s
另外 8 秒左右,则在数据库机器和 CSV 目的地之间传输数据。然后将数据写回文件本身将取决于目的地的磁盘速度等。总而言之,一切都很完美,对于我们上面示例场景中的数据量,它应该花费不到 1 分钟的时间。在现实世界中,数据库服务器繁忙,其他变量发挥更大作用,和/或数据更多,您可能需要几分钟或更长时间才能查看某些内容。