분산 컴퓨팅 설정에서 많은 노드에 unordered_set을 보내려고합니다. C++의 직렬화에 대해 알고 있습니다. boost::serialization
을 사용합니다. 직렬화 된 쇠고기는 직렬화 된 데이터를받은 후 모든 노드에서 unordered_set
데이터 구조를 다시 작성하는 데 드는 비용에 직면하고 있습니다.C++ 직렬화를 사용하지 않고 unordered_set *의 바이트 표현을 가져옵니다
내 아이디어는 고정 된 크기의 인접한 메모리를 할당하고 할당 후 시작 메모리 주소를 반환하는 unordered_set에 대한 사용자 지정 할당자를 작성하는 것입니다. 그런 다음 unordered_set
의 바이트 표현을 가져 와서 와이어를 통해 전송하고 수신 노드에이 메모리 덩어리가 unordered_set
임을 알리고 싶습니다.
그게 가능할까요? 너희들은 내 문제를 해결할 수있는 대안적인 아이디어가 있니? 또는 관련 포인터가 있습니까? 그런 할당자를 쓰는 것에? 모든 의견을 보내 주시면 감사하겠습니다.
감사합니다.
의견을 보내 주셔서 감사합니다. 1 + 3) 모든 기계에는 동일한 하드웨어 + 소프트웨어가 있습니다. 2) 예, 그게 문제입니다. 저는 그걸 어쨌든 피하려고합니다. 상대 주소를 사용하여. 따라서 키 - 값 쌍을 보내는 것만으로도 직렬화가 다시 시작될 수 있지만 결국 궁극적으로 갈 길이 ... 다시 한번 감사드립니다! – Christian
@Christian : 내부적으로 'unordered_map'에 접근 할 수 없기 때문에 상대 주소를 사용할 수 없습니다. –
@Christian : 동일한 소프트웨어라도 많은 해시 테이블 해시가 공격자가 선택한 데이터 DoS 공격을 더 어렵게 만들기 위해 무작위성을 주입합니다. (즉, 공격자가 서비스에 높은 부하를 가하기 위해 해시 테이블의 최악의 O (n) 사례를 강제하도록 특별히 설계된 일부 데이터를 작성하는 경우) –