相关疑难解决方法(0)

使用ActiveRecord find_in_batches方法删除大数据

好的,所以我知道在处理非常大的数据时,我们可以使用find_in_batches哪个,据我所知,它Model.all.each以非常快的方式完成工作,效率更高

现在,我有一个非常大的数据,我正在尝试删除,我正在考虑使用它find_in_batches来批量删除它们.

以下是我所拥有的(来自rake任务database.rake):

old_messages = TextMessage.where("created_at < ?", number.days.ago )

old_messages.find_in_batches do |batch|
  batch.delete_all
end
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到以下错误:

ArgumentError: wrong number of arguments (0 for 1..3)
/Users/Sunday/.rvm/gems/ruby-2.2.0/gems/httparty-0.13.5/lib/httparty.rb:66:in `logger'
/Users/Sunday/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.2/lib/active_record/relation/delegation.rb:94:in `public_send'
/Users/Sunday/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.2/lib/active_record/relation/delegation.rb:94:in `block in method_missing'
/Users/Sunday/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.2/lib/active_record/relation.rb:302:in `scoping'
/Users/Sunday/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.2/lib/active_record/relation/delegation.rb:94:in `method_missing'
/Users/Sunday/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.2/lib/active_record/relation/batches.rb:112:in `find_in_batches'
/Users/Sunday/workspace/resilience/lib/tasks/database.rake:18:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

database.rake第18行的地方是:old_messages.find_in_batches do |batch|.

那么,是否有可能find_in_batches像我想要的那样用于删除?如果答案是肯定的,那么我做错了什么.感谢所有回复.

ruby activerecord ruby-on-rails

8
推荐指数
2
解决办法
3889
查看次数

Oracle DB每日分区

我有下表

  CREATE TABLE "METRIC_VALUE_RAW" 
   (    
    "SUBELEMENT_ID" INTEGER NOT NULL , 
    "METRIC_METADATA_ID" INTEGER NOT NULL , 
    "METRIC_VALUE_INT" INTEGER, 
    "METRIC_VALUE_FLOAT" FLOAT(126), 
    "TIME_STAMP" TIMESTAMP  NOT NULL 
   ) ;
Run Code Online (Sandbox Code Playgroud)
  1. 每小时数据将使用sql loader加载到表中.
  2. 我想创建分区,以便每天的数据进入分区.
  3. 在表格中我想存储数据30天.因此,当它超过30天时,最旧的分区应该被删除.

您能否分享一下我如何设计分区的想法?

oracle database-partitioning

5
推荐指数
2
解决办法
7726
查看次数

DELETE + JOIN + ORDER BY + LIMIT =语法错误

掉落ORDER BY+ LIMIT,JOIN,一切都是桃子.把它们放在一起,我似乎释放了海妖.任何可以解雇的人?

DELETE table1 AS t1
FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.id = t2.id
WHERE t2.field = 'something'
ORDER BY t1.id DESC
LIMIT 5
Run Code Online (Sandbox Code Playgroud)

(使用别名删除)

我也尝试过没有别名并放弃WHERE,但无济于事.始终是语法错误" near 'ORDER BY...".

mysql delete-row

4
推荐指数
1
解决办法
4555
查看次数

从大表中删除大量记录的有效方法

我想从MySql DB中的大表(~500K记录)中删除大量记录(~200K).

我希望尽可能高效地进行此调用,因为我不希望DB在执行调用时变得"无响应". 我需要删除"超过10天"的记录(根据created_at列),目前我使用:

delete from table_name where created_at < DATE_SUB(CURDATE(),INTERVAL 10 DAY)
Run Code Online (Sandbox Code Playgroud)

id如果有帮助,该表还有一个主键.

有什么想法吗?

mysql performance

1
推荐指数
2
解决办法
1万
查看次数

从MySQL数据库删除数百万行的最快方法是什么?

我的数据库空间不足,因此我对旧记录进行了备份。现在,我必须清除这些记录,并且我的参考列是“日期”。

我尝试使用标准方法:

DELETE FROM table WHERE date >= '2017-01-01' AND date <= '2017-12-31'
Run Code Online (Sandbox Code Playgroud)

但这显然要花费太多时间,因为要删除的行超过700万行。有没有办法加快速度?我试图划分成几个月甚至更小的块,但是在运行代码一段时间后,我与服务器断开了连接。

提前致谢。

编辑:

CREATE TABLE table (

  id INT(11) NOT NULL AUTO_INCREMENT,
  date DATE DEFAULT NULL,
  # 18 more columns

  PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 29616055,
AVG_ROW_LENGTH = 317,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci;
Run Code Online (Sandbox Code Playgroud)

mysql sql

1
推荐指数
1
解决办法
238
查看次数