데이터가 비즈니스에 더욱 중요해짐에 따라 실시간 데이터 처리(특히 데이터가 청크 또는 스트림으로 도착하는 경우) 및 분석에 대한 필요성이 전례 없는 속도로 증가하고 있습니다. 실시간 데이터 처리에 의존하는 애플리케이션은 특히 대규모 데이터 세트로 작업할 때 수동 폴링으로 인한 성능 오버헤드를 유발하지 않으면서 데이터 변경이 발생할 때 실시간 알림을 받을 수 있는 안정적인 방법이 필요합니다. 이러한 문제를 해결하기 위해 NCache 그것의 제공 연속 쿼리 기능 – 정의된 기준에 따라 데이터를 필터링하는 쿼리를 만들 수 있습니다.
수동 폴링의 번거로움 없이 CQ를 통해 개발자는 데이터 변경 사항을 실시간으로 추적하고 경고를 받을 수 있습니다. 예를 들어, 실시간 주식 거래 애플리케이션에서 거래자는 변동하는 주가에 대한 지속적인 업데이트가 필요합니다. 적절한 실시간 모니터링 시스템이 없으면 주식 가격을 수동으로 확인해야 하므로 시간과 기회를 놓칠 수 있습니다. 따라서 거래자는 필터링된 데이터가 변경될 때마다 실시간 업데이트를 수신하도록 주식 가격을 필터링하는 쿼리를 생성할 수 있습니다. 이렇게 하면 선택한 데이터 세트에 대해서만 캐시를 쿼리할 수 있는 이점이 있습니다(사용하여 SQL과 유사한 OQL 쿼리) 캐시를 소진하지 않고 분산 캐시 클러스터 내에서. 이 블로그에서는 연속 쿼리를 사용하여 데이터 변경 사항을 모니터링하는 방법을 안내합니다. NCache 파이썬을 사용하여.
에서 지속적인 쿼리를 통한 변화 모니터링 NCache
와 NCache의 연속 쿼리 기능을 사용하면 분산 캐시 네트워크에서 특정 데이터 세트를 정의하고 OQL 쿼리를 사용하여 변경 사항을 추적할 수 있습니다. 언제 변경 추가, 업데이트 또는 제거 작업과 같은 쓰기 작업으로 인해 데이터 세트 내에서 발생하는 경우 등록된 애플리케이션은 다음을 통해 업데이트됩니다. 캐시 레벨 이벤트, OQL 쿼리를 사용하여 데이터를 필터링하여 애플리케이션 중복을 방지합니다. 이벤트를 통해 애플리케이션 간에 데이터를 추적하고 공유하는 방법을 제공함으로써 CQ는 개발자가 비즈니스 로직을 지정할 수 있도록 합니다.
Python에서 CQ를 사용할 때 사용자는 NCache CQ 이벤트에 등록하기 위한 Python 클라이언트 라이브러리. 이벤트 실행 시 반환되는 데이터의 양을 지정할 수도 있습니다. 없음, 메타 데이터및 데이터와메타데이터. 그러나 연속 쿼리는 애플리케이션 데이터를 변경하는 것이 아니라 변경 사항을 모니터링하는 메커니즘으로만 작동한다는 점을 이해하는 것이 중요합니다.
연속 쿼리 구성 NCache
아래 언급된 단계는 사용자가 정의한 데이터 세트에 대한 알림을 수신하기 위해 콜백, 쿼리 및 알림을 등록 및 등록 취소하는 프로세스를 설명합니다.
1단계: 이벤트에 대한 콜백 등록
먼저 캐시 수준 이벤트에 대한 콜백을 등록해야 합니다. 추가, 업데이트, 제거 또는 조합일 수 있으므로 쿼리가 수정될 때마다 이러한 콜백이 실행됩니다. 아래 샘플 코드는 ITEM_ADDED 이벤트에 대한 콜백을 등록하는 방법을 보여줍니다.
1 2 3 4 |
def query_item_callback(key: str, arg: ncache.CQEventArg): if arg.get_event_type() is ncache.EventType.ITEM_ADDED: # Key has been added to the cache print(key + " added to cache") |
다음에 대한 콜백 이벤트를 등록할 수도 있습니다. 항목 업데이트 및 제거 이벤트.
2단계: 쿼리 및 알림 등록
데이터 변경 사항을 추적하는 핵심 프로세스 NCache 콜백을 등록하고 결과 집합 기준을 지정하는 연속 쿼리를 생성합니다. 쿼리 생성 후 사전 정의된 콜백은 다음을 기반으로 등록됩니다. 이벤트 유형 와 이벤트 데이터 필터. 다음으로, 실행 판독기 CQ가 다음을 사용하여 서버에 등록된 후 캐시된 데이터를 쿼리하는 데 사용됩니다. 레지스터_cq. 이벤트를 트리거하기 위해 결과 집합에 영향을 미치도록 캐시 데이터를 수정할 수 있습니다. 아래 샘플 코드는 이 시나리오를 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# Precondition: Cache is already connected # Query for required operation query = "SELECT $Value$ FROM FQN.Product WHERE category = ?" query_command = ncache.QueryCommand(query) query_command.set_parameters({"Category": "Beverages"}) # Create continuous query continuous_query = ncache.ContinuousQuery(query_command) event_type = [ncache.EventType.ITEM_REMOVED] # Item remove notification # EventDataFilter.Metadata returns cache keys + item metadata on updation continuous_query.add_data_modification_listener(cq_event_listener, event_type, ncache.EventDataFilter.NONE) # Register continuous query on server cache.get_messaging_service().register_cq(continuous_query) reader = cache.get_search_service().execute_reader(query_command) if reader.get_field_count() > 0: while reader.read(): result = reader.get_value(Product, 1) # Perform operations else: # None query result set returned print("Query result is None") # Update Product data in cache to trigger callback updated_product = Product() updated_product.set_product_id(1001) updated_product.set_product_name("Tea") key = "Product:" + updated_product.get_product_id() cache_item = ncache.CacheItem(updated_product) # Trigger add notifications version = cache.insert(key, cache_item) # This will add item to the result set as it matches query criteria |
3단계: 연속 쿼리에서 알림 등록 취소
애플리케이션에서 연속 쿼리의 알림 수신을 중지하려면 다음을 사용하여 알림을 등록 취소할 수 있습니다. Remove_data_modification_listener 방법. 그러나 이는 추가 및 제거와 같은 이벤트 유형에만 적용됩니다. 이전에 항목 추가 및 제거 이벤트 모두에 등록했지만 지금은 제거된 항목에 대한 알림만 필요한 경우 항목 추가 알림을 등록 취소할 수도 있습니다.
1 2 3 |
# Unregister notifications for ItemAdded events only event_type = [ncache.EventType.ITEM_ADDED] c_query.remove_data_modification_listener(cq_event_listener, event_type) |
4단계: 서버에서 연속 쿼리 등록 취소
이 쿼리가 더 이상 필요하지 않을 때 리소스 활용을 방지하려면 서버에서 연속 쿼리 등록을 취소해야 합니다. 이렇게 하면 더 이상 쿼리 결과 집합의 변경 사항에 대한 알림을 받지 않습니다. 다음 코드 예제는 다음을 사용하여 캐시 서버에서 CQ 등록을 취소하는 방법을 보여줍니다. un_register_cq 방법.
1 2 |
# Unregister cq from server cache.get_messaging_service().un_register_cq(c_query) |
결론
와 NCache의 연속 쿼리 기능을 사용하면 분산 캐시 클러스터 내 특정 데이터 세트의 변경 사항을 모니터링할 수 있습니다. 애플리케이션에서 필요한 데이터만 검색하도록 하여 효율성을 높이고 OQL 쿼리 및 캐시 수준 이벤트를 통해 관련 없는 데이터 처리를 최소화합니다. 변경 사항을 모니터링하는 쉽고 유연한 방법입니까? 오늘 무료 평가판을 시작하세요!