2017-12-14 22 views
1

RocksDB newbie here.RocksDB에서 세션 전용 memtable 업데이트/병합

런타임시 나는 에 대해서만 RocksDB를 사용하여 데이터을 읽습니다. 때로는 다른 소스의 세션 특정 레코드를 병합해야합니다.

주 데이터베이스에 병합하지 않기를 바랍니다. 특정 세션의 세션 수명 동안 만 존재하도록하고 싶습니다.

물론 정규 std :: vector를 사용하여 RocksDB와 다른 소스를 병합 할 수 있지만 데이터가 중복됩니다.

나는 memtable 및 merge와 같은 개념을 많이 사용합니다.이 개념은 사용되거나 악용 될 수있는 것처럼 들립니다. 예를 들어, memtable에게 절대 커밋하지 말고 변경 사항을 포기하면 작동합니다. 그것은 가능합니까?

답변

0

가장 쉬운 방법은 응용 프로그램을 종료 할 때 다른 column families으로 분리하여 유지하려는 것이 아니라 그냥 삭제하는 것입니다. 항목 당 수명이 필요한 경우 RAII 보유자 클래스와 같은 사용자 지정을 고려해야합니다. C++을 사용하는 경우 생성시 삽입하고 삭제시 삭제합니다. 클라식 실패의 경우 데이터를 깨끗하게 분리하기 위해 별도의 컬럼 패밀리를 사용하고 있습니다.

+0

감사합니다. @midor. 실제로, 나는 "열"이 아닌 "행"을 추가하는 것을 의미하며 다른 데이터베이스의 것입니다. 이 경우에도 귀하의 조언은 여전히 ​​유효합니까? –

+0

나는 그것을 얻었지만, 당신이하려고했던 것은 그 구현에 다소 혼란 스러울 것이다. 읽기만하면 데이터베이스 백업에서 데이터베이스를 복원 한 다음 데이터베이스를 조작하면 데이터베이스를 종료 할 수 있습니다. 다음에 백업을 다시 시작하면 아무 것도 변경되지 않습니다. 단점은 온라인 상태에서 원본 데이터를 절대 조작 할 수 없다는 것입니다. – midor

+0

다시 한번 감사드립니다. Meh :). 나는이 두 가지를 기억 속에 섞을 것이라고 생각한다. –