IMHO, FRP (Functional Reactive Programming)는 어떤 의미에서 캐시 무효화를 해결하는 일반적인 방법입니다.
이유는 다음과 같습니다. FRP 용어의 오래된 데이터를 글리치 라고합니다 . FRP의 목표 중 하나는 결함이 없음을 보장하는 것입니다.
FRP는이 'FRP의 본질'토크 와이 SO 답변 에서 더 자세히 설명됩니다 .
에서 이야기Cell
s는 캐시 된 개체 / 법인을 대표하고는 Cell
그것의 의존성 중 하나가 갱신되면 갱신됩니다.
FRP는 종속성 그래프와 관련된 배관 코드를 숨기고 부실이 없는지 확인합니다 Cell
.
내가 생각할 수있는 또 다른 방법 (FRP와 다른)은 계산 된 값 (유형의 b
)을 어떤 종류의 작가 모나드로 래핑하는 것입니다. Writer (Set (uuid)) b
여기서 Set (uuid)
(Haskell 표기법)은 계산 된 값이 b
의존 하는 가변 값의 모든 식별자를 포함합니다 . 따라서 uuid
계산 된 값이 b
의존 하는 가변 값 / 변수 (예 : 데이터베이스의 행)를 식별하는 일종의 고유 식별자입니다 .
이 아이디어를 이러한 종류의 작성자 Monad에서 작동하는 결합 자와 결합하면 이러한 결합자를 사용하여 새로운 b
. 이러한 콤비는 (의 특별 버전 말 filter
테이크 작가의 모나드) 및 (uuid, a)
입력으로 -s a
에 의해 식별되는 가변 데이터 / 변수입니다 uuid
.
때마다 당신이 "원래"데이터를 변경 그래서 (uuid, a)
(있는 데이터베이스의 정규화 된 데이터 말하는 b
유형의 계산 된 값이있는 계산 된) b
다음에 포함 된 캐시를 무효화 할 수 있습니다 따라 b
어떤 값 돌연변이 경우 a
계산 된 b
값이 따라 달라집니다 , Set (uuid)
Writer Monad를 기반으로하면 언제 이런 일이 발생하는지 알 수 있기 때문입니다 .
따라서 주어진으로 무언가를 변경할 때마다이 uuid
변이를 모든 캐시에 브로드 캐스트 b
하고 said로 식별 된 변경 가능 값에 의존 하는 값 을 무효화합니다. uuid
왜냐하면 b
래핑 된 Writer 모나드가 이것이 b
said uuid
또는 아니.
물론 이것은 글을 쓰는 것보다 더 자주 읽는 경우에만 효과가 있습니다.
세 번째, 실용적인 접근 방식은 데이터베이스에서 구체화 된 뷰를 사용하고이를 캐시로 사용하는 것입니다. AFAIK 그들은 또한 무효화 문제를 해결하는 것을 목표로합니다. 물론 이것은 가변 데이터를 파생 데이터에 연결하는 작업을 제한합니다.