저는 많은 gen_server를 시작하는 관리자가 있습니다. 각 gen_server에는 많은 시간이 걸리는 많은 데이터로드가 있습니다. 오류가 발생하면 gen_server 상태에 저장되어있는 데이터와 해당 프로세스의 사전을 다음에 계속 유지하여 다시 초기화 할 필요가 없는지 알고 싶습니다.감독자가 gen_server에서 데이터를 다시 시작한 후에도 유지됩니까?
답변
얼랑 동작의 현재 상태는 아무 곳에도 저장되지 않습니다. 당신은 자신을 돌보아야 할 것입니다.
상태를 외부 (다른 프로세스, ETS 테이블, 데이터베이스 등)에 regurlarly 저장하거나 시작시 상태를 다시 만들 수 있도록 init/1
함수가 충분히 스마트하고 동적인지 확인하십시오. 기존 파일 복구, 원래 입력 인수 등을 기반으로 일부 캐시 다시 작성)
기본적으로 충돌을 견뎌야하는 데이터와 지속성 또는 재 작성 방법을 정의해야합니다.
내가 추가 할 수있는 유일한 것 : 특히 많은 상태를 저장하는 프로세스 사전을 피하십시오. 가장 좋은 방법은 전혀 사용하지 않는 것입니다. –
@Peer : 특히 프로세스의 메모리에 속한 모든 데이터와 마찬가지로 데이터를 유지하지 않기 때문에. –
응용 프로그램에서 응용 프로그램의 충돌을 지속해야하는 데이터가있는 경우 응용 프로그램에서 데이터베이스 (Mnesia) 또는 ETS/DETS tables
으로 분리해야합니다. gen_server 상태에 응용 프로그램의 일시적인 상태를 신속하게 조작 할 수있는 live/temporary/transient
정보가 포함되도록합니다.
gen_server init/1이 호출 되 자마자 구성 파일이나 Database를 읽어서 시작 상태가되도록하십시오. 일반적으로 응용 프로그램이 서버의 마지막 상태에 많이 의존 할 때 gen_server 상태를 조작하는 요청이 들어올 때마다 정보를 추출하여 영구 저장소에 복사합니다 (이 데이터를 이전의 알려진 상태로 레이블 지정합니다). 이렇게하면 init/1 함수가 항상 마지막/이전 상태를 확인하거나 새로운 상태를 시작해야하는지 여부를 확인할 수 있습니다.
- 1. Windows Phone 7에서 제거한 후에도 응용 프로그램 설정이 유지됩니까?
- 2. Android 시스템을 업그레이드 한 후에도 응용 프로그램 환경 설정이 유지됩니까?
- 3. 방향으로 다시 시작한 Android 동영상
- 4. SQLite 데이터베이스의 일부 변경 사항은 응용 프로그램을 닫고 다시 시작한 후에도 유지되지 않습니다.
- 5. erlang OTP 감독자가 충돌 함
- 6. 다시 게시하는 동안 jQuery .data()가 유지됩니까?
- 7. 삭제 된 후에도 파일이 서버에 다시 나타납니다.
- 8. 기기를 다시 시작한 후 appWidget 레이아웃이 재설정됩니다.
- 9. SharedPreferences는 활동을 다시 시작한 후에 만 표시됩니다.
- 10. CruiseControl. 서버를 다시 시작한 후의 닷넷 문제
- 11. VM에서 Tomcat을 다시 시작한 후 Youtrack이 재설정됩니다.
- 12. 다시 시작한 후 SQL Server가 느려짐
- 13. Node.js : 시작한 앱을 "부드럽게"다시 시작하려면 어떻게해야하나요?
- 14. iphone에서 다시 시작한 후에 언어가 변경됩니다.
- 15. 다시 시작한 후 RMI 레지스트리가 비어 있습니다.
- 16. 아파치 다시 시작한 후 장고 예외가 발생했습니다.
- 17. BroadcastReceiver에서 시작한 활동으로 데이터를 전달하는 방법은 무엇입니까?
- 18. JList & JComboBox 데이터를 다시 할당합니다.
- 19. NSTimer는 자동으로 유지됩니까?
- 20. SQL 서버를 자동으로 다시 시작한 후 프로파일 러/Traceon을 활성화하십시오.
- 21. 메인 모듈을 다시 시작한 후 파이썬 모듈이 업데이트되지 않음
- 22. UITextField가있는 UITableView - 사용자가 스크롤 한 후에도 데이터를 유지합니다.
- 23. 시뮬레이터에서 앱을 제거하고 다시 시작한 후 인스트루먼트 메모리/좀비 데이터를 수집하는 방법은 무엇입니까?
- 24. 브라우저를 통해 페이지를 떠난 후에도 fsockopen으로 열린 소켓이 열린 상태로 유지됩니까?
- 25. 사각형의 열 공간의 기준은 제곱 한 후에도 동일하게 유지됩니까? 즉 c (A) = c (AxA)입니까?
- 26. 브라우저가 닫힌 후에도 세션 유지 보수
- 27. 큰 데이터를 다시 정렬하십시오.
- 28. C# ASP.NET 데이터를 다시
- 29. 백그라운드에서 다시 시작한 후 iOS 충돌 NSAKAccessObjectContext에서 롤백을 호출합니다.
- 30. PyQt4 스레딩 : 스레드로 데이터를 다시 보내기
[this] (http://learnyousomeerlang.com/building-applications-with-otp#the-onion-layer-theory)를 읽을 수도 있습니다. 그것은 여러 종류의 국가에 대해 이야기하고 문제를 다루는 방법을 제안합니다. –