내가 좋아하는 사전에 저장 상당히 복잡하고 중첩 된 (위, 아래 참조 된 개체를 호출 참조) 객체 (클래스)이 프로젝트가 :메모리 맵 파일 또는 직렬화 매우 큰 개체의 속도
public static Dictionary<string, Object1> DObject { get; set; }
을 Object1은 복잡한 클래스입니다. 그것은 "주소록"또는 "사람 정보"클래스와는 다릅니다. 클래스 자체에는 배열, 다른 객체의 사전이 있습니다. DOUBject의 크기는 메모리에서 1GB +가 될 수 있으므로 BinaryFormatter를 사용하여 파일로 직렬화 할 것입니다. 이 객체를로드해야하기 때문에 MemoryMappedFile을 사용하려고 생각했습니다. 새 키와 값이 사전에 추가 될 수 있습니다. 개체에 더 많은 데이터가있을 수 있습니다 (추가/업데이트 됨). MMF는 크기를 변경합니까? 메모리 매핑 된 파일의 DObject에서 특정 키에 어떻게 액세스합니까? 메모리에 해시 테이블과 같은 검색 메커니즘이있어 사전과 같은 특정 키를 찾아 값을 얻을 수 있습니까? 이 MMF는 어떻게 작동합니까?
이상적인 생각입니다. 디스크에 큰 파일 (2GB 이상)이 있습니다. 디스크에 메모리가 저장된 것처럼 디스크의 사전에있는 개체를 빠르게 업데이트합니다. 모든 것이 빠릅니다. 키 - 값 조회. 조회, 값 수정, 저장 등 ... 원하는 경우 언제든지이 2GB + 개체에 빠르게 액세스해야합니다. WCF 서버가 다시 시작되면이 2GB + 크기 개체에 빠르게 액세스해야합니다. 그래서 내가 1) 직렬화 2)를 생각하고 있었던 것이다. 로드 및 MMF 읽기 /. 나의 주요 관심사는이 순간의 속도 다. 다른 단어로 프로젝트를 디버깅 할 때마다 처음부터이 2GB 데이터를 다시로드 할 수는 없습니다 (시간이 오래 걸립니다).
이 상황을 어떻게 처리해야하는지에 대한 제안, 아이디어 및 의견.
장기간 지속성을 위해 binaryformatter에서 문제가 발생할 수 있습니다 (예 : 네임 스페이스를 변경하면 문제가 빨리 발생합니다). 단기 저장을 위해서는 괜찮을 지 모르지만 메모리 사용에주의해야한다. 문제없이 32 비트 프로세스에서 binaryformatter로 1Gb 그래프를 직렬화 할 수 있다고는 생각하지 않는다. 테이블로의 매핑이 임피던스 문제를 일으킨다 고 생각한다면 RavenDB와 같은 문서 데이터베이스를 고려해 볼 수 있습니다.이 데이터베이스는 전체 문서 그래프를 디스크상의 JSON으로 매핑하고 많은 문제를 처리합니다. –
이들 데이터베이스 중 어떤 것도 객체 그래프 (20 개의 상호 연결된 클래스)를 JSON/BSON으로 구문 분석하고 그 사이에 모든 참조를 유지 한 다음 저장할 수 있습니까? 이게 어떻게 작동합니까? 내 이상적인 생각은 RavenDB 또는 MongoDB에 DObject를 곧장 공급하고 모든 것을 직렬화하고 저장한다는 것입니다. RavenDB에 DObject를 넣으려면 어떤 단계가 필요합니까? 나는 MongoDB를 처음 접했지만 그것에 대해 많이 들었다. – iefpw
RavenDB가 객체를 직접 삼키는 지 아닌지는 객체가 어떻게 구성되어 있는지에 따라 다릅니다. RavenDB는 JSon.NET을 사용하므로 Json.NET을 사용하여 루트 객체를 덤프하고 멀리 떨어져 있는지 확인할 수 있습니다. –