从 table 备份/删除的最快方法

Fastest way to backup / delete from table

我正在尝试从 table 中备份一些超过 5000 万行的数据。 table 看起来像这样

# 
entry_id             : int unsignedauto_increment   # unique entry id
---
time=CURRENT_TIMESTAMP : timestamp                  # current timestamp
room                 : varchar(255)                 # Room
id                   : varchar(255)                 # Sensor ID / NAME
value                : double                       # sensor value

我的计划是

  1. 获取有限数量的 KEYS(即 fetch('KEY', limit=some_large_number)
  2. 检索这些 KEYS
  3. 的 table 个条目
  4. 将数据块保存在磁盘上
  5. 删除属于 KEYS
  6. 的 table 个条目
  7. 重新开始...

只是获取,比方说 1_000_000 个条目,相当快(几秒钟),但是如果我想通过检索主键 -> 获取数据 -> 删除这些条目 - 我基本上被卡住了在获取数据时(>20 分钟 ~ 100_000 条目或超时(?))。

使用数据联合逻辑执行此任务的最优雅/最省时的方法是什么?

(Datajoint python 版本 '0.13.2')

如果你的数据没有变化,那么你可以使用limitoffset关键字跨过table,在不删除或限制的情况下分块获取。无需先检索主键,限制获取,或删除块。

step = 1_000_000
for chunk in range((len(table) + step - 1) // step):
    block = table.fetch(limit=step, offset=step * chunk)
    ... # save block

如果这是简单的备份,则不需要删除。如需删除数据,可在最后一次性删除。