<aside> 📋 CRDT 시리즈
노드 안에 다음 노드가 들어있는 구조였던 초기 버전의 head를 그대로 저장했더니 MongoDB의 최대 depth를 초과하는 문제가 있었어요.
MongoDB supports no more than 100 levels of nesting for BSON documents. Each object or array adds a level.
하나의 블럭 안에 100글자 이상을 작성할 수 없었죠.
출처: 원희님
그래서 링크드리스트의 노드들을 펼쳤어요.
class Identifier {
clock: number;
client: number;
}
class Node {
id: Identifier;
value: string;
next: Identifier | null;
prev: Identifier | null;
}
class LinkedList {
head?: **Identifier**;
nodeMap: {
JSON.stringify(Identifier): Node
};
}
변경 이후 CRDT 링크드리스트는 head를 나타내는 Identifier와, 노드 정보를 가진 nodeMap을 가지고 있어요.
DB에는 이렇게 저장돼요.