저는 약 15 개의 열 (주로 수레)이있는 500,000 개 이상의 행이있는 매우 큰 SQLite 테이블을 가지고 있습니다. SQLite DB에서 Django 응용 프로그램으로 데이터를 전송하고 싶습니다. (많은 RDBM에서 지원할 수 있지만 Postgres에서는 가능합니다.) 모든 것이 정상적으로 작동하지만 반복이 계속되면 메모리 사용량이 파이썬 프로세스에 대해 초당 2 ~ 3 메가 씩 증가합니다. 나는 'del'을 사용하여 각 반복 끝에 EVEMapDenormalize 및 행 개체를 삭제하려고 시도했지만 부풀기가 계속됩니다. 발췌입니다, 어떤 아이디어?Django + SQLite3를 사용한 메모리 사용
class Importer_mapDenormalize(SQLImporter):
def run_importer(self, conn):
c = conn.cursor()
for row in c.execute('select * from mapDenormalize'):
mapdenorm, created = EVEMapDenormalize.objects.get_or_create(id=row['itemID'])
mapdenorm.x = row['x']
mapdenorm.y = row['y']
mapdenorm.z = row['z']
if row['typeID']:
mapdenorm.type = EVEInventoryType.objects.get(id=row['typeID'])
if row['groupID']:
mapdenorm.group = EVEInventoryGroup.objects.get(id=row['groupID'])
if row['solarSystemID']:
mapdenorm.solar_system = EVESolarSystem.objects.get(id=row['solarSystemID'])
if row['constellationID']:
mapdenorm.constellation = EVEConstellation.objects.get(id=row['constellationID'])
if row['regionID']:
mapdenorm.region = EVERegion.objects.get(id=row['regionID'])
mapdenorm.save()
c.close()
이 SQLite DB를 Django ORM으로 감싸는 데 관심이 없습니다. 난 정말 내 RAM을 모두 빠지게하지 않고 데이터를 전송하는 방법을 알아 내려고하고 싶습니다.
데이터를 가져 오기 위해 왜 순차적 SQL 삽입 문을 사용하지 않습니까? 그렇지 않으면 특정 유형을 한 번만 찾도록 objects.get 호출 결과를 캐싱하여 성능을 향상시킬 수 있습니다. – Tom
Django의 ORM을 사용하여 광범위한 데이터베이스 엔진에서 데이터 무결성을 보장하고자했습니다. 사용자는 장고가 지원하는 임의의 RDBM에 배포 할 수 있습니다. – Greg
바보 같은 저기, 장고 FAQ에서 해결되었습니다 : http://docs.djangoproject.com/en/dev/faq/models/#why-is-django-leaking-memory DB 쿼리 캐시 지우기가 필요합니다. DEBUG 모드 일 때. django에서 가져 오기 db db.reset_queries() – Greg