シーン記述
オンラインmysql
毎日統計表の結果を格納したデータベース、毎日非常に多くの統計がありますなぜあなたは、想像もしなかっただろうそのうち1000万件の以上の作品があります。運用・保守の上に見ると、ディスクが占め200G
、そして最終的に、最後の3日間維持することができ、以前のデータのみを削除することができ演算子を尋ねました。削除する方法を、削除しますか?
これはオンラインデータベースですので、テーブル内に格納されている他の多くのデータがありますが、直接データを削除した場合、このテーブルは、確かに、他のテーブルは影響を受ける可能性があるではありません。毎日ただ、それを削除バルクにPythonスクリプトを記述する方法をデータを削除しようとしない、または悪化しカトン。
具体的なアイデアは、次のとおりです。
- 毎日のデータのみを削除します。
- 一日のデータを削除し、各削除50000;
- 日データの削除、データの削除を開始するには、次の日の終わり。
Pythonコード
# -*-coding:utf-8 -*-
import sys
# 这是我们内部封装的Python Module
sys.path.append('/var/lib/hadoop-hdfs/scripts/python_module2')
import keguang.commons as commons
import keguang.timedef as timedef
import keguang.sql.mysqlclient as mysql
def run(starttime, endtime, regx):
tb_name = 'statistic_ad_image_final_count'
days = timedef.getDays(starttime,endtime,regx)
# 遍历删除所有天的数据
for day in days:
print '%s 数据删除开始'%(day)
mclient = getConn()
sql = '''
select 1 from %s where date = '%s' limit 1
'''%(tb_name, day)
print sql
result = mclient.query(sql)
# 如果查询到了这一天的数据,继续删除
while result is not ():
sql = 'delete from %s where date = "%s" limit 50000'%(tb_name, day)
print sql
mclient.execute(sql)
sql = '''
select 1 from %s where date = '%s' limit 1
'''%(tb_name, day)
print sql
result = mclient.query(sql)
print '%s 数据删除完成'%(day)
mclient.close()
# 返回mysql 连接
def getConn():
return mysql.MysqlClient(host = '0.0.0.0', user = 'test', passwd = 'test', db= 'statistic')
if __name__ == '__main__':
regx = '%Y-%m-%d'
yesday = timedef.getYes(regx, -1)
starttime = '2019-08-17'
endtime ='2019-08-30'
run(starttime, endtime, regx)
あるかどうかを決定するサイクルデータは、一日削除し続ける50000
データのを、そうでない場合、次の日には、データの削除を開始します。それは半分の時間を取って、最終的に完成を削除します。
私は、マイクロチャネル公衆番号に注意を歓迎します