문서 자동 만료 기능이 완벽하게 작동하는 사용 사례는 많습니다. 세션 상태, 장바구니, 여행 가격 견적 등을 유지 관리합니다. 이러한 모든 경우에 Couchbase Server를 사용하는 애플리케이션은 만료 시간을 초, 분 또는 시간으로 설정하여 사용자 행동을 관리합니다.
데이터베이스에 만료일이 있는 항목의 경우, Couchbase Server에는 지정된 만료 시간에 데이터가 사라지도록 하는 인텔리전스가 내장되어 있습니다. 다음에 대한 모든 정보를 찾을 수 있습니다. TTL 및 만료는 Couchbase Server 문서에서 확인할 수 있습니다. 만료가 있는 대부분의 시스템에는 만료되는 데이터를 갱신하거나 일련의 문서가 곧 만료될 것임을 다운스트림 시스템에 알리려는 사용 사례도 함께 제공됩니다. 만료되는 데이터의 갱신 또는 알림에는 일반적으로 예정된 문서 만료를 확인하는 프로세스가 포함됩니다. 글로벌 인덱스와 N1QL이 추가되면서 이 정보를 쿼리하는 속도가 훨씬 빨라졌습니다. |
|
과거에는 이 정보를 맵/축소 보기에서 인덱싱할 수 있었습니다. 맵/축소 보기가 강력한 인덱싱을 제공할 수 있지만, 분산 수집으로 인해 글로벌 인덱스가 유리합니다.
그 이유는 다음과 같습니다: 글로벌 인덱스는 데이터와 독립적으로 파티션을 분할합니다. 예를 들어, 데이터가 20개의 노드에 분산되어 있더라도 인덱스가 단일 노드에 맞는다면 글로벌 인덱스는 단일 노드에 상주할 수 있습니다. 또한 카우치베이스 서버에서 인덱스와 데이터 노드에 동일한 HW를 선택할 필요도 없습니다. 즉, 인덱스에 맞도록 충분히 "키가 큰" 인덱스 노드를 얻을 수 있습니다. 맵/축소 보기와 글로벌 보조 인덱스의 차이점에 대해 자세히 알아보세요. 여기.
만료 정보를 색인하고 쿼리하여 만료되는 데이터를 감지하는 방법은 다음과 같습니다: 샘플에서는 .Net을 사용하겠습니다.
1단계- 문서 본문에 만료일 포함: 앞으로는 이 작업을 수행할 필요가 없지만 현재 META()는 아직 만료일을 노출하지 않습니다. 아래 코드에서 문서가 만료될 대략적인 시간을 계산하는 exp_datetime 속성을 JSON에 추가합니다. (이것은 분산 시스템이며 중앙 시간이 없다는 점을 기억하세요. 클라이언트 및 서버 노드마다 시계가 약간씩 다르므로 정확한 만료 시간을 감지하기 어렵습니다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
... cbDoc = new 문서 { Id = _key, 콘텐츠 = new { a1 = _a1, ... exp_datetime = 날짜/시간.UtcNow.밀리초 추가(30000) } }; //UPSERT cbDoc.만료 = 30000; var 업서트 = cbBucket.Upsert(cbDoc); ... |
2단계 - 만료 시간에 대한 인덱스를 만듭니다.
1 |
만들기 INDEX iExpiration 켜기 기본값(exp_datetime) 사용 GSI; |
3단계 - 다음 30초 후에 만료되는 데이터를 쿼리합니다. 다음 쿼리는 문서 ID와 전체 문서 값을 반환합니다.
1 2 3 4 |
선택 메타(기본값).id, * FROM 기본값 어디 DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(날짜_추가_밀리스(NOW_MILLIS(),30,"second")),"second") < 30 AND STR_TO_UTC(exp_datetime) IS NOT 누락; |
출력에는 향후 30초 내에 만료되는 모든 문서가 포함됩니다.
행복한 해킹