파일에서받은 데이터로 주기적으로 값을 증가시켜야합니다. 테이블에> 400000 개의 행이 있습니다. 지금까지 모든 시도는 성능이 매우 떨어졌습니다. 내 요구 사항을 반영하는 실험을 작성했습니다 :sqlalchemy 대량 업데이트 성능 문제
#create table
engine = create_engine('sqlite:///bulk_update.db', echo=False)
metadata = MetaData()
sometable = Table('sometable', metadata,
Column('id', Integer, Sequence('sometable_id_seq'), primary_key=True),
Column('column1', Integer),
Column('column2', Integer),
)
sometable.create(engine, checkfirst=True)
#initial population
conn = engine.connect()
nr_of_rows = 50000
insert_data = [ { 'column1': i, 'column2' : 0 } for i in range(1, nr_of_rows)]
result = conn.execute(sometable.insert(), insert_data)
#update
update_data = [ {'col1' : i, '_increment': randint(1, 500)} for i in range(1, nr_of_rows)]
print "nr_of_rows", nr_of_rows
print "start time : " + str(datetime.time(datetime.now()))
stmt = sometable.update().\
where(sometable.c.column1 == bindparam('col1')).\
values({sometable.c.column2 : sometable.c.column2 + bindparam('_increment')})
conn.execute(stmt, update_data)
print "end time : " + str(datetime.time(datetime.now()))
내가 할 시간이 있습니다
nr_of_rows 10000
start time : 10:29:01.753938
end time : 10:29:16.247651
nr_of_rows 50000
start time : 10:30:35.236852
end time : 10:36:39.070423
그렇게 행 400000+ 양이 너무 오래 걸릴 일을.
저는 sqlalchemy를 처음 사용 합니다만, 나는 많은 독서를했으며, 내가 잘못하고있는 것을 이해하지 못했습니다.
미리 감사드립니다.
대단히 감사합니다. 색인 생성에 대해 들어 봤지만 훨씬 많은 양으로 재생할 수 있다고 생각했습니다. 이제 모든 것이 명확 해집니다. – devboell