나는 또 다른 질문을했다. https://stackoverflow.com/questions/1180240/best-way-to-sort-1m-records-in-python 나는 1 백만 개의 레코드를 분류하는 최선의 방법을 결정하려고 애썼다. 필자의 경우 컬렉션에 추가 항목을 추가 할 수 있어야합니다. 이 작업을 위해 Zope의 BTrees를 사용해 보도록 제안되었습니다. 몇 가지 독서를 한 후에 나는 어떤 데이터를 세트에 넣을 지에 대해 다소 혼란 스럽습니다.Python : Zope의 BTree OOSet, IISet 등 ...이 요구 사항에 효과적입니까?
기본적으로 각 레코드에 대해 두 가지 데이터가 있습니다. 1. 사용자에게 매핑되는 고유 ID 및 2. 정렬에 대한 관심 값.
OOSet에 항목을 튜플로 추가 할 수 있습니다. 여기서 정렬을위한 값은 인덱스 0에 있습니다. 따라서 (200, 'id1'),(120, 'id2'),(400, 'id3')
과 결과 집합은 id2, id1 and id3
순으로 정렬됩니다.
그러나이 요구 사항의 일부는 각 ID가 집합에 한 번만 표시된다는 것입니다. 나는 주기적으로 추가 데이터를 추가 할 것이고 새로운 데이터는 중복 된 'ids'를 포함 할 수도 있고 포함하지 않을 수도 있습니다. 중복 된 경우 값을 업데이트하고 추가 항목을 추가하지 않습니다. 위의 튜플에 기반하여 (405, 'id1'),(10, 'id4')
을 집합에 추가 할 수 있으며 출력에 id4, id2, id3, id1
이 순서대로 표시되도록 할 수 있습니다.
이 작업을 수행하는 방법에 대한 제안. 그 주제에 대한 나의 초라한 죄송합니다.
* 편집 - 추가 정보 * 여기
프로젝트에서 일부 실제 코드 :
for field in lb_fields:
t = time.time()
self.data[field] = [ (v[field], k) for k, v in self.foreign_keys.iteritems() ]
self.data[field].sort(reverse=True)
print "Added %s: %03.5f seconds" %(field, (time.time() - t))
foreign_keys 키와 사전의 각 ID로 사전에 원본 데이터입니다 추가 데이터를 값으로 사용합니다. data는 정렬 된 데이터 목록을 포함하는 사전입니다.
부수적으로, lb_fields의 for 필드의 각 itereation이 실행됨에 따라 정렬 시간이 늘어나지 만별로 눈에 띄지 않습니다. 16 개의 필드 각각에 대해 1 백만 개의 레코드가 정렬 된 후 약 4 개의 기가 또는 RAM을 사용합니다. 결국 이것은 48 기가의 컴퓨터에서 실행됩니다.
관계를 파괴 의지하지 않을 몇 분이 소요될 수 있으므로 9 초가 이상입니다. 내 정렬 시간이 훨씬 길고 훨씬 길기 때문에 내가 언급하지 않은 근본적인 문제가있는 것처럼 느껴진다. 현재이 제품은 IBM xServe Dual 2.2 Ghz Core II Duo, 6 gb RAM에서 테스트/개발 중입니다. 나는이 모든 자료를 기억에 남기고있다. 원래 데이터를 생성하고 정렬하는 ThreadingTCPServer를 실행 중입니다. 그런 다음 추가 데이터를 추가 할 수있는 방법이 있습니다. 내가 벤치마킹 출력 시간을 출력하는 일종의 일을하고 그들이 5 분 이상 걸릴! – sberry
이 시간을 측정하는 데 사용한 답변을 편집 해주세요! –