datajoint - 从表中备份/删除的最快方法
问题描述
我正在尝试从具有 > 50M 行的表中备份一些数据。桌子看起来像这样
#
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 的表条目
- 将数据块保存在磁盘上
- 删除属于 KEYS 的表条目
- 重来 ...
只是获取,比如说 1_000_000 个条目,相当快(几秒钟),但是如果我想通过检索主键 - > 获取数据 - > 删除这些条目 - 我基本上被困在获取数据(> 20 分钟) ~ 100_000 个条目或超时(?))。
使用数据联合逻辑执行此任务的最优雅/最省时的方法是什么?
(数据联合python版'0.13.2'
)
解决方案
如果你的数据没有变化,那么你可以使用limit
andoffset
关键字来遍历表,在不删除或限制的情况下分块获取。无需先检索主键、限制提取或删除块。
step = 1_000_000
for chunk in range((len(table) + step - 1) // step):
block = table.fetch(limit=step, offset=step * chunk)
... # save block
如果这是一个简单的备份,则不需要删除。如果您需要删除数据,您可以在最后一次将其全部删除。
推荐阅读
- json - 组件中未定义的渲染函数或模板:pages/index.vue
- c# - 如何将多个参数作为“参数”传递但在 C# 中引用
- c++ - 在线程中等待标志的最佳方法
- ruby-on-rails - 将字符串转换为 DateTime 在控制台中有效,但在请求中无效(Rails)?
- json - 如何在 JSON 输出中避免 \n
- javascript - 使用酶的 JS 单元测试:如何在继续测试用例之前等待组件方法中的 setState 完成
- r - 根据因子名称分配身份代码
- python - 如何将所有全局变量导入函数 - Python
- terminal - 有没有人让 Powerlevel9k 主题在 *new* Windows 终端/WSL 上看起来不错?
- microsoft-graph-api - 从带有二进制主体的 MS Flow 调用 MS Graph API