저는 시뮬레이션을 작성하는 계획 단계에 있으며 메모리 및 속도 고려 사항을 기반으로 데이터를 표현하는 방법에 대한 아이디어가 필요합니다.시뮬레이션 시스템의 경우 어떤 데이터 구조가 가장 적합합니까?
각 시간 단계에서 시뮬레이션 프로세스는 10^3에서 10^4 개의 새 데이터 레코드를 생성하고 각각의 새 레코드 또는 기존 레코드 (10^6에서 10^8까지)를보고 삭제합니다 수정합니다.
각 레코드에는 3-10 개의 간단한 필드가 있으며 각 필드에는 정수 또는 여러 ASCII 문자의 문자열이 있습니다. 또한 각 레코드에는 1-5 개의 다른 필드가 있으며 각 필드에는 정수가 들어있는 가변 길이 목록이 있습니다. 일반적인 레코드의 무게는 100-500 바이트입니다.
수정 또는 삭제 프로세스는 다음과 같이 작동합니다.이 레코드의 경우 인수가이 레코드의 필드 일부 값과 다른 레코드의 필드 값인 함수를 계산합니다. 결과에 따라 프로세스는 필드를 삭제하거나 수정하기 위해 준비합니다.
그런 다음 서로 다른 레코드에 대해 반복하십시오. 그런 다음 다음 레코드로 이동하고 반복하십시오. 모든 레코드가 처리되면 시뮬레이션은 다음 시간 단계로 이동할 준비가됩니다.
다음 시간 단계로 이동하기 전에 준비된대로 모든 삭제 및 수정 사항을 적용하십시오.
허용되는 레코드가 많을수록 시뮬레이션이 좋습니다. 모든 레코드가 RAM에 있다면, 단점은 시뮬레이션 크기이며 아마 위쪽은 속도입니다. 시뮬레이션은 실시간 일 필요는 없지만 분명히 너무 느리게하는 것은 아닙니다.
메모리의 각 레코드를 나타내려면 목록 또는 dict (중첩 된 일부 목록 포함) 또는 클래스 인스턴스 중 하나를 선택해야합니다. 모든 레코드를 저장하고 다른 날에 시뮬레이션을 계속하려면 다음과 같은 옵션을 사용합니다. csv 파일은 각 레코드가 레코드이거나 RAM에 모든 레코드를 넣은 다음 파일에 저장합니다 (아마도 피클), 또는 일종의 데이터베이스를 사용하십시오.
저는 파이썬 기초와 발전기와 같은 몇 가지 개념을 배웠지 만 데이터베이스를 배운 적이 없으며 산 세척을 시도하지 않았으며 더 많은 것을 배울 필요가 있습니다. 가능하다면 1이 있기 때문에 여러 대의 컴퓨터를 사용하지 않아야합니다. 동시성은 너무 무서워 보입니다.
메모리에 레코드를 표현하는 방법과 시뮬레이션 된 시스템을 저장하는 방법에 대해 조언 하시겠습니까?
가장 간단한 방법으로 먼저 시작하고 필요에 따라 [충분한] 추상화를 그대로 둡니다. 어쨌든 "키 값 저장소"또는 "지속 된 해시 저장소"를 살펴볼 가치가 있습니다. –