从 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
我的计划是
- 获取有限数量的 KEYS(即
fetch('KEY', limit=some_large_number)
)
- 检索这些 KEYS
的 table 个条目
- 将数据块保存在磁盘上
- 删除属于 KEYS
的 table 个条目
- 重新开始...
只是获取,比方说 1_000_000 个条目,相当快(几秒钟),但是如果我想通过检索主键 -> 获取数据 -> 删除这些条目 - 我基本上被卡住了在获取数据时(>20 分钟 ~ 100_000 条目或超时(?))。
使用数据联合逻辑执行此任务的最优雅/最省时的方法是什么?
(Datajoint python 版本 '0.13.2'
)
如果你的数据没有变化,那么你可以使用limit
和offset
关键字跨过table,在不删除或限制的情况下分块获取。无需先检索主键,限制获取,或删除块。
step = 1_000_000
for chunk in range((len(table) + step - 1) // step):
block = table.fetch(limit=step, offset=step * chunk)
... # save block
如果这是简单的备份,则不需要删除。如需删除数据,可在最后一次性删除。
我正在尝试从 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
我的计划是
- 获取有限数量的 KEYS(即
fetch('KEY', limit=some_large_number)
) - 检索这些 KEYS 的 table 个条目
- 将数据块保存在磁盘上
- 删除属于 KEYS 的 table 个条目
- 重新开始...
只是获取,比方说 1_000_000 个条目,相当快(几秒钟),但是如果我想通过检索主键 -> 获取数据 -> 删除这些条目 - 我基本上被卡住了在获取数据时(>20 分钟 ~ 100_000 条目或超时(?))。
使用数据联合逻辑执行此任务的最优雅/最省时的方法是什么?
(Datajoint python 版本 '0.13.2'
)
如果你的数据没有变化,那么你可以使用limit
和offset
关键字跨过table,在不删除或限制的情况下分块获取。无需先检索主键,限制获取,或删除块。
step = 1_000_000
for chunk in range((len(table) + step - 1) // step):
block = table.fetch(limit=step, offset=step * chunk)
... # save block
如果这是简单的备份,则不需要删除。如需删除数据,可在最后一次性删除。