일단 구현은 PostgreSql로 할꺼니까 거기 있는 기능 다 써서 구현하려함
- 테이블 설계: 테이블은 변하지 않는 내용은 전통적인 방법으로 컬럼 정의해서 거기다 두고, 두개의 특수컬럼을 둠. 하나는 immutable_cols 를 두고 거기에 JSON 키값들을 보관, 다른 하나는 is_active (디폴트 true)
- immutable_records 테이블은 unique id, ctime, JSON data 세개를 두며, unique id와 ctime으로 index.
- DML은 스토어드 프로시져로 immutable_insert, immutable_delete, immutable_update, immutable_select를 지원
- 최초 immutable_insert(생성자 개념) 수행시 불변하는 내용은 맨 처음에 정의하는 테이블에 두고, JSON은 immutable_records 테이블에 저장. 이때 JSON 키값을 불변 테이블에 배열로 저장
- immutable_update (JSON data의 변경) 수행시, 새로운 데이터를 immutable_records에 insert. 불변 테이블의 JSON 키값과 새 데이터 key값을 intersect 해서 키값 업데이트
- immutable_delete : 불변 테이블의 is_active = false
- immutable_select : 불변테이블 먼저 select후, JSON 키값에에 대해 immutable_records 테이블에서 가장 최근 각 키들을 select 한후 union. 이때 ctime 이 옵션으로 들어오면 해당 시간 부터 이전 레코드들을 union해서 풀셋을 리턴.
- 전통적인 insert, update, delete는 금지
그럴듯 하냐?
왜뭘하려는건지모르겠네요
ㄴ 얌마 이건 이를테면 객체의 생성부터 소멸까지 변화 순간순간을 다 기록해ㅜ놓고 타임머신 처럼 되돌아 갈수있게 하려먼 필요한거야
그외 빅데이터 분석에도 쓰일수 있다
이흉은 누가 알려달라니까 뭐라하더니 다 썰을 퍼주넹. 뭔가 츤데레 캐릭
흉 디비자체를 넘 불변에 맞추신거아님? 기술하신 업뎃도그렇고. 뭔 의도라도 있는거임?
ㄴ 이건 개념자체가 테이블 레코드 하나에 시간개념 없이 상태만 보존하는게 아니라 불변하는건 따로 떼서 불변으로 두고 변하는 부분은 변할때마다 새 레코드를 몽고디비 스타일로 기록하는 거야. 이러면 시간에 따른 상태를 모두 유지해서 빅데이터 분석, 과거 오류 수정, 데이터 감사 등이 가능해짐 immutable db 찾아보면 나올거임
http://royal-car.tk/이
중고차 어플리케이션 어떤가요?