KR101871383B1 - 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 - Google Patents

계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR101871383B1
KR101871383B1 KR1020157022163A KR20157022163A KR101871383B1 KR 101871383 B1 KR101871383 B1 KR 101871383B1 KR 1020157022163 A KR1020157022163 A KR 1020157022163A KR 20157022163 A KR20157022163 A KR 20157022163A KR 101871383 B1 KR101871383 B1 KR 101871383B1
Authority
KR
South Korea
Prior art keywords
event
node
source node
client
occurrence
Prior art date
Application number
KR1020157022163A
Other languages
English (en)
Other versions
KR20150111952A (ko
Inventor
필립 리우
비샬 카투리아
Original Assignee
페이스북, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 페이스북, 인크. filed Critical 페이스북, 인크.
Publication of KR20150111952A publication Critical patent/KR20150111952A/ko
Application granted granted Critical
Publication of KR101871383B1 publication Critical patent/KR101871383B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • H04L41/0604Management of faults, events, alarms or notifications using filtering, e.g. reduction of information by using priority, element types, position or time
    • H04L41/0609Management of faults, events, alarms or notifications using filtering, e.g. reduction of information by using priority, element types, position or time based on severity or priority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

계층적 데이터 구조의 노드에서 재귀적 감시를 등록하기 위한 방법 및 시스템이 개시된다. 개시된 기술의 실시예는 (i) 소스 노드에 이벤트 리스너를 등록하기 위한 요청을 수신하는 단계로서, 상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나; (ii) 소스 노드에 이벤트 리스너를 등록하는 단계로서, 상기 이벤트 리스너는 클라이언트에게 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정됨; 및 (iii) 만약 소스 노드가 계층 내에 자손 노드를 가지면, 자손 노드에 다른 이벤트 리스너의 등록 요청 없이 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 통지하도록 설정하는 단계를 포함할 수 있다. 상기 노드의 각각은 예컨대 저장 장치의 논리적 파티션을 나타낼 수 있다.

Description

계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 {METHOD AND SYSTEM FOR USING A RECURSIVE EVENT LISTENER ON A NODE IN HIERARCHICAL DATA STRUCTURE}
본 출원은 본 명세서에 전체로서 참조로 통합되는 2013년 1월 23일자로 출원된 미국특허출원 제13/748,173호의 우선권을 주장한다.
본 발명은 일반적으로 컴퓨터 애플리케이션의 이벤트 리스너에 관한 것이다. 보다 자세하게는, 본 발명은 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하는 것과 관련된 것이다.
컴퓨터 관련 기술에서, 이벤트 리스너는 소프트웨어 객체(이하 "객체"라고 함) 중 특정 타입 또는 타입들의 이벤트의 발생을 감지하고(듣고(listen)) 이벤트의 발생을 구독자에게 통지하는 요소이다. 상이한 레벨의 계층에서 객체를 가지는 계층적 데이터 구조에서, 임의의 객체에서 이벤트의 발생을 감지하기 위해(예컨대 객체의 생성, 객체의 삭제 또는 객체의 수정), 현재 이벤트 리스너 기술은 계층적 데이터 구조의 각 객체에 이벤트 리스너를 등록한다. 이들 기술은 전형적으로 이벤트 리스너를 등록하는데 상당한 양의 시간과 메모리를 소비한다.
예를 들어, 소셜 네트워킹 환경이 100,000명의 사용자(클라이언트)를 가지고 서버가 계층적 데이터 구조로 체계화고 일부 사용자 정보를 나타내는 1억개의 객체를 포함하는 시나리오를 고려한다. 객체에 이벤트 리스너를 등록하는 것이 메모리의 1비트를 소비한다고 가정한다. 만약 100,000개의 클라이언트가 있고, 100,000개의 클라이언트 각각이 서버의 1억개의 객체 각각에 이벤트 리스너를 두기 원하면, 메모리의 1.25테라바이트가 단순히 이벤트 리스너의 등록에 소비될 수 있다. 3가지 종류의 이벤트 리스너가 한 객체에 등록될 수 있다 - (a) 객체의 생성, (b) 객체의 수정 및 (c) 객체의 자식. 따라서, 메모리의 3.75테라바이트가 단순히 이벤트 리스너의 등록에 소비될 수 있다. 나아가, 만약 클라이언트가 분리된 등록 요청을 계층의 각 객체에 보낸다면, 상당한 양의 네트워크 밴드폭과 시간이 등록에 소비될 것이다. 통상 현재 이벤트 리스너 기술은 적어도 시간, 메모리 및 네트워크 밴드폭의 소비와 관련하여 비효율적이다. 나아가, 이벤트 리스너 등록의 현재 기술과 관련한 비효율은 클라이언트의 수, 계층 내의 객체의 수 또는 양자 모두가 증가함에 따라 확대된다. 분산형 시스템 구조에서, 새로운 분산형 애플리케이션 또는 서비스 및 서비스를 소비하기 원하는 새로운 클라이언트는 계속하여 증가할 수 있다. 이러한 분산형 환경에서, 이벤트 리스너를 등록하는 현재 기술은 이벤트 리스너의 등록에 상당한 양의 자원을 소비함으로써 일반적으로 전체 시스템의 효율을 상당히 감소시킬 것이다.
후술되는 내용은 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 등록하는 기술이다. 재귀적 이벤트 리스너는 재귀적 이벤트 리스너가 등록된 노드에서 발생하는 이벤트를 듣고 노드의 자손 노드에서 발생하는 이벤트 또한 재귀적 이벤트 리스너나 자손 노드의 다른 어떤 이벤트 리스너의 등록 요청 없이 듣는 이벤트 리스너이다. 본 기술은 특히 계층적 데이터 구조를 가지는 환경에서 보다 효율적으로 메모리를 사용하고 자원을 처리하고, 감시되는 객체의 수 또는 감시를 요청하는 클라이언트의 수에 심각하게 불리한 영향을 받지 않는다.
개시된 기술의 일실시예는 클라이언트로부터 소스 노드 상에 이벤트 리스너를 등록하는 요청을 수신하는 것을 포함한다. 소스 노드는 계층 내의 서로 연관된 복수의 노드 중 하나이고 각 노드는 저장 장치의 논리적 파티션을 나타낸다. 서버는 소스 노드에 이벤트 리스너를 등록하고 이벤트 리스너는 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정된다. 나아가, 서버는 소스 노드가 계층 내에 자손 노드를 가졌는지 여부를 판단하고 소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 서버는 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 자손 노드에서의 다른 이벤트 리스너의 등록 요청 없이 통지하도록 설정한다.
개시된 기술의 적어도 일부 실시예에서, 클라이언트는 노드에서의 제1 이벤트 또는 자손 노드에서의 제2 이벤트 중 적어도 하나가 발생할 때, 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지받는다.
개시된 기술의 적어도 일부 실시예에서, 노드에 등록된 이벤트 리스너는 제1 이벤트 또는 제2 이벤트의 발생을 클라이언트에게 통지한 이후에도 유지된다.
일부의 실시예는 상술한 것에 추가하여 또는 이를 대신하여 다른 태양, 요소, 특징 및 단계를 가진다. 이런 잠재적인 추가 및 대체가 본 명세서의 나머지 부분을 통해 기술된다.
본 발명에 따른 실시예들은 특히 시스템, 저장 매체 및 방법에 관한 첨부된 청구항들에 개시되며, 가령 방법과 같은 하나의 청구항 카테고리에 언급되는 임의의 특징은 또한 가령 시스템과 같은 다른 청구항 카테고리로 청구될 수 있다.
본 발명에 따른 일실시예에서, 방법은: 컴퓨터 네트워크의 컴퓨터 시스템에서, 컴퓨터 시스템의 클라이언트로부터 소스 노드에 이벤트 리스너를 등록하기 위한 요청을 수신하는 단계; 컴퓨터 시스템의 서버에 의해, 소스 노드에 이벤트 리스너를 등록하는 단계; 서버에 의해, 소스 노드가 계층 내에 자손 노드를 가지는지 여부를 결정하는 단계; 및 소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 서버에 의해, 자손 노드에 다른 이벤트 리스너의 등록 요청 없이 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 통지하도록 설정하는 단계를 포함하고, 상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이고, 상기 노드의 각각은 컴퓨터 시스템의 저장 장치의 논리적 파티션을 나타내고, 상기 이벤트 리스너는 클라이언트에게 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정된다.
추가 실시예에서, 방법은: 소스 노드에서의 제1 이벤트 또는 자손 노드에서의 제2 이벤트 중 적어도 하나가 발생할 때, 클라이언트에게 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지하는 단계를 포함한다.
소스 노드에 이벤트 리스너를 등록하는 단계는 이벤트 리스너를 제1 이벤트 또는 제2 이벤트의 발생을 클라이언트에게 통지한 이후에도 유지하는 단계; 및 클라이언트에 의해 제거될 때까지 이벤트 리스너를 유지하는 단계를 포함할 수 있다.
클라이언트에게 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지하는 단계는 제1 이벤트의 발생을 듣는 단계; 소스 노드에 대응하는 서버의 메모리 내의 필드가 자손 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 요청 없이 제2 이벤트의 발생을 듣는 단계; 및 클라이언트에게 소스 노드에서의 제1 이벤트의 발생 또는 자손 노드에서의 제2 이벤트의 발생을 통지하는 단계를 포함할 수 있고, 상기 제1 이벤트의 발생을 듣는 단계는 서버에 의해 소스 노드에 대응하는 서버의 메모리 내의 필드가 소스 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정할 수 있다.
소스 노드에 이벤트 리스너를 등록하는 단계는 이벤트 리스너를 클라이언트에게 기결정된 종류의 제1 이벤트 또는 제2 이벤트의 발생을 통지하도록 설정하는 단계를 포함할 수 있다.
상기 기결정된 종류의 제1 이벤트 또는 제2 이벤트는 (i) 새로운 노드의 생성, (ii) 존재하는 노드의 삭제 또는 (iii) 존재하는 노드의 수정 중 적어도 하나를 포함할 수 있다.
상기 제1 이벤트 및 제2 이벤트는 동일한 기결정된 종류의 이벤트일 수 있다.
상기 제1 이벤트 및 제2 이벤트는 상이한 기결정된 종류의 이벤트일 수 있다.
상기 저장 장치는 복수의 논리적 파티션을 포함하고, 상기 논리적 파티션의 각각은 저장 장치에 저장된 데이터의 별개의 겹치지 않는 서브셋을 저장할 수 있다.
이벤트 리스너가 자손 노드에서의 제2 이벤트의 발생을 클라이언트에게 통지하도록 설정하는 단계는 이벤트 리스너가 자손 노드에서의 이벤트의 발생을 클라이언트에게 계층 내에서 소스 노드로부터 시작되는 선택된 경로를 따라 통지하도록 설정하는 단계를 포함할 수 있다.
소스 노드에 이벤트 리스너를 등록하는 단계는 접근 제어를 설정함으로써 소스 노드에의 이벤트 리스너의 등록을 컴퓨터 시스템에서 사용자 역할의 기결정된 집합으로 제한하는 단계를 포함할 수 있다.
본 발명에 따른 추가 실시예에서, 방법은: 컴퓨터 네트워크의 컴퓨터 시스템에 의해, 컴퓨터 시스템의 서버 내의 소스 노드에서 이벤트가 발생했는지 여부를 결정하는 단계; 및 소스 노드에서 이벤트가 발생했다는 결정에 응답하여, 서버에 의해, 소스 노드에 컴퓨터 시스템의 클라이언트에 의해 이벤트 리스너가 등록됐는지 여부를 결정하는 단계; 소스 노드에 이벤트 리스너가 등록됐다는 결정에 응답하여, 클라이언트에게 소스 노드에서의 이벤트의 발생을 통지하는 단계; 및 소스 노드에 이벤트 리스너가 등록되지 않았다는 결정에 응답하여, 서버에 의해, 소스 노드가 계층 내에 선조 노드를 가지는지 여부를 결정하는 단계; 소스 노드가 계층 내에 선조 노드를 가진다는 결정에 응답하여, 서버에 의해, 선조 노드에 이벤트 리스너가 등록됐는지 여부를 결정하는 단계; 및 선조 노드에 이벤트 리스너가 등록됐다는 결정에 응답하여, 클라이언트에게 소스 노드에서의 이벤트의 발생을 통지하는 단계를 포함하고, 상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이고, 상기 노드의 각각은 컴퓨터 시스템의 저장 장치의 논리적 파티션을 나타낸다.
소스 노드에 등록된 상기 이벤트 리스너는 클라이언트에게 이벤트의 발생을 통지하는 행동 이후에도 유지될 수 있다.
상기 이벤트는 (i) 새로운 노드의 생성, (ii) 존재하는 노드의 삭제 또는 (iii) 존재하는 노드의 수정 중 적어도 하나를 포함할 수 있다.
추가 실시예에서 방법은: 서버와 클라이언트 간 통신 실패에 응답하여, 클라이언트로부터 새로운 서버의 소스 노드에 새로운 이벤트 리스너를 등록하도록 하는 요청을 수신하는 단계; 새로운 서버에 의해 트랜잭션 수(transaction number)를 사용하여, 최근 이벤트가 수신된 시간으로부터 소스 노드 및 소스 노드의 자손에서 발생한 이벤트의 리스트를 획득하는 단계; 및 새로운 서버에 의해 클라이언트로 이벤트의 리스트를 송신하는 단계를 더 포함하고, 상기 새로운 서버는 계층 내에서 노드의 적어도 일부분의 복사본을 가지고, 상기 요청은 서버로부터 수신한 최근 이벤트의 트랜잭션 수를 포함한다.
또한 청구될 수 있는 본 발명의 실시예에서, 장치는: 서버; 서버 장치와 협력하여 클라이언트로부터 소스 노드에 이벤트 리스너를 등록하기 위한 요청을 수신하도록 설정된 수신 모듈; 리시버 모듈과 협력하여 소스 노드에 이벤트 리스너를 등록하도록 설정된 등록 모듈; 등록 모듈과 협력하여 소스 노드가 계층 내에 자손 노드를 가지는지 여부를 결정하도록 설정된 계층 결정 모듈; 및 계층 결정 모듈과 협력하여 소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 자손 노드에 다른 이벤트 리스너의 등록 요청 없이 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 통지하도록 설정하도록 설정된 계층 이벤트 처리 모듈을 포함하고, 상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이고, 상기 노드의 각각은 컴퓨터 시스템의 저장 장치의 논리적 파티션을 나타내고, 상기 이벤트 리스너는 클라이언트에게 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정된다.
상기 이벤트 리스너는 등록 모듈과 협력하여 소스 노드에서의 제1 이벤트 또는 자손 노드에서의 제2 이벤트 중 적어도 하나가 발생할 때, 클라이언트에게 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지하도록 더 설정될 수 있다.
상기 이벤트 리스너 모듈은 제1 이벤트의 발생을 듣고, 소스 노드에 대응하는 서버의 메모리 내의 비트가 자손 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 요청 없이 제2 이벤트의 발생을 듣고, 및
클라이언트에게 소스 노드에서의 제1 이벤트의 발생 또는 자손 노드에서의 제2 이벤트의 발생을 통지하도록 더 설정되고, 상기 제1 이벤트의 발생을 듣는 것은 서버에 의해 소스 노드에 대응하는 서버의 메모리 내의 비트가 소스 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 것을 포함할 수 있다.
상기 이벤트 리스너는 이벤트 리스너를 클라이언트에게 기결정된 종류의 이벤트의 발생을 통지하도록 더 설정되고, 상기 기결정된 종류의 이벤트는 (i) 새로운 노드의 생성, (ii) 존재하는 노드의 삭제 또는 (iii) 존재하는 노드의 수정 중 적어도 하나를 포함할 수 있다.
상기 저장 장치는 복수의 논리적 파티션을 포함하고, 상기 논리적 파티션의 각각은 저장 장치에 저장된 데이터의 별개의 겹치지 않는 서브셋을 저장할 수 있다.
본 발명의 추가 실시예로, 실행되어 본 발명 또는 상술한 임의의 실시예에 따른 시스템 상에서 수행될 때 구동 가능한 소프트웨어를 포함하는 하나 이상의 컴퓨터 판독가능한 비일시적 저장 매체 역시 청구될 수 있다.
본 발명의 추가 실시예에서, 시스템은: 프로세서; 및 프로세서와 연결되고 프로세서에 의해 실행가능한 명령어를 포함하는 메모리를 포함하고, 상기 프로세서는 명령어를 실행할 때 본 발명에 따른 방법 또는 임의의 상술한 실시예을 수행하도록 구동가능하다.
본 발명의 내용 중에 포함되어 있다.
도 1은 본 발명의 일실시예가 구동할 수 있는 환경을 도시한다.
도 2는 계층적 데이터 구조의 노드 상에서의 재귀적 이벤트 리스너를 도시하는 블록도이다.
도 3은 계층적 데이터 구조의 노드 상에서의 재귀적 이벤트 리스너의 등록에 대한 흐름도이다.
도 4는 계층적 데이터 구조의 노드에서 이벤트가 발생했는지 통지에 대한 흐름도이다.
도 5는 도 1의 코디네이션 서비스(Coordination Service)에서 재귀적 이벤트 리스너의 등록을 도시하는 예시를 제공한다.
도 6은 클라이언트와 서버 간 통신 실패에 응답하여 클라이언트에 의해 재귀적 이벤트 리스너를 재등록하는 프로세스를 도시하는 흐름도이다.
도 7은 다양한 동작을 수행하고, 그러한 동작에 의해 생성 및/또는 사용되는 다양한 정보를 저장할 수 있는 장치의 블록도이다.
이 설명에서 "일실시예", "하나의 실시예" 또는 이와 같은 것에 대한 참조는 기술된 특정 특징, 기능 또는 특성이 본 발명의 적어도 하나의 실시예에 포함됨을 의미한다. 이 설명에서 이러한 문구의 존재는 모두 같은 실시예를 참조로 하거나, 반드시 상호 배타적일 것을 필요로 하는 것은 아니다.
개시된 내용은 계층적 데이터 구조의 노드 상에 재귀적 이벤트 리스너를 등록하는 방법 및 시스템이다. 개시된 기술의 일실시예는 클라이언트로부터 소스 노드 상에 이벤트 리스너를 등록하는 요청을 수신하는 것을 포함한다. 소스 노드는 계층 내의 서로 연관된 복수의 노드 중 하나이고 각 노드는 예컨대 저장 장치의 논리적 파티션을 나타낸다. 서버는 소스 노드에 이벤트 리스너를 등록하고 이벤트 리스너는 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정된다. 나아가, 서버는 소스 노드가 계층 내에 자손 노드를 가졌는지 여부를 판단하고 소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 서버는 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 자손 노드에서의 다른 이벤트 리스너의 등록 요청 없이 통지하도록 설정한다.
이후로 다른 언급이 없으면, 용어 "이벤트 리스너"는 "재귀적 이벤트 리스너" 또한 의미한다. 비재귀적 이벤트 리스너는 "비재귀적 이벤트 리스너"라고 할 것이다.
환경
도 1은 본 발명의 일실시예가 구동할 수 있는 환경(100)을 도시한다. 도시된 바와 같이, 환경(100)은 예컨대 메릴랜드주의 포레스트 힐의 아파치 소프트웨어 재단로부터 사용가능한 주키퍼(ZooKeeper) 서비스의 구현일 수 있는, 코디네이션 서비스(125)를 포함한다. 다른 실시예에서, 환경(100)은 분산형 시스템 또는 분산형 애플리케이션을 위한 코디네이션 서비스를 제공하는 다른 유사한 서비스를 포함할 수 있다. 코디네이션 서비스(125)는 분산형 애플리케이션을 위한 동기화, 설정 유지, 그룹 및 네이밍(naming)과 같은 코디네이션 서비스를 제공한다. 코디네이션 서비스(125)는 앙상블이라고 불리는 서버들의 그룹(105) 상에서 복제된다(서버들(120)의 그룹(105)는 이후 "그룹" 또는 "앙상블"이라고도 한다). 그룹(105) 내의 서버의 다수가 사용가능한 한, 코디네이션 서비스(125)는 사용가능하다. 그룹(105)의 각 서버는 예컨대 각 다른 서버의 상태와 같은 정보를 가질 수 있다.
앙상블(105)에서, 한 서버는 합의(consensus)를 통해 예컨대 기록과 같은 트랜잭션(transaction)를 허가하고 조정하는 역할인 리더(115)로 행동할 수 있다. 앙상블의 리더(115)가 아닌 서버는 리더(115)의 직접적인, 읽기 전용 복제품(replica)인 팔로워로 행동할 수 있다. 코디네이션 서비스(125)에서, 클라이언트로부터의 쓰기 요청의 일부는 리더(115)로 전달된다. 팔로워는 리더(115)로부터 제안을 수신하고 클라이언트로부터의 요청의 처리에 동의하거나 반대할 수 있다. 나아가, 코디네이션 서비스(125)에서, 만약 리더(115)가 실패하거나 다르게 사용불가능하게 되면, 임의의 팔로워가 합의를 통해 새 리더가 될 수 있고, 요청 처리를 계속할 수 있다. 팔로워의 나머지는 새 리더와 동기화할 수 있다.
환경(100)은 코디네이션 서비스(125)를 사용하는 애플리케이션(도시되지 않음)이 사용하는 데이터를 포함하는 데이터베이스(도시되지 않음)과 같은 저장 매체를 포함한다. 예컨대 소셜 네트워킹 환경과 같은 애플리케이션에서, 데이터베이스는 예컨대 사용자 프로필 데이터를 포함할 수 있다. 데이터베이스는 여러 개의 샤드(shards)라고도 불리는 논리 파티션으로 나누어져, 각각은 데이터베이스의 데이터의 서브셋을 포함할 수 있다. 예를 들어, 소셜 네트워킹 애플리케이션에서, 만약 데이터베이스가 100,000명의 사용자의 사용자 프로필 데이터를 저장한다면, 제1 샤드는 사용자 1 내지 10,000의 사용자 프로필 데이터를 저장하고, 제2 샤드는 사용자 10,001 내지 20,000의 사용자 프로필 데이터를 저장하는 등등일 수 있다. 데이터베이스의 각 샤드는 데이터베이스의 데이터의 별개의 겹치지 않는 서브셋을 저장할 수 있다.
데이터베이스의 샤드들은 트리 구조(130)과 같은 계층적 데이터 구조에서 노드의 집합을 나타낼 수 있다. 트리 구조(130)은 예컨대 서버(120)의 메모리 내에 생성된다. 클라이언트(110)은 서버(120)의 트리 구조(130) 내의 대응하는 노드에 접근함으로써 데이터베이스의 샤드 내의 데이터에 접근한다. 트리 구조(130)의 루트 노드 "A"는 사용자 데이터베이스를 나타내고, 노드 "B"는 사용자 1 내지 10,000의 사용자 데이터를 가지는 샤드를 나타내고, 노드 "C"는 사용자 10,001 내지 20,000의 사용자 데이터를 가지는 샤드를 나타내고, 노드 "D"는 사용자 20,001 내지 30,000의 사용자 데이터를 가지는 샤드를 나타낼 수 있다.
클라이언트(110)는 트리 구조(130) 내의 임의의 노드에서의 이벤트의 발생의 통지를 구독할 수 있다. 클라이언트(110)가 노드 내의 이벤트의 발생의 통지를 구독하기 위하여, 클라이언트(110)는 서버(120)가 특정 노드에 이벤트 리스너를 등록하도록 요청할 수 있다. 예를 들어, 클라이언트(110)는 서버(120)가 트리 구조(130)의 노드 A에 이벤트 리스너를 등록하도록 요청할 수 있다. 이벤트 리스너는 재귀적 이벤트 리스너이거나 비재귀적 이벤트 리스너일 수 있다.
비재귀적 이벤트 리스너는 이벤트 리스너가 등록된 노드에서 발생하는 이벤트만 감시한다. 예를 들어, 만약 클라이언트(110)가 노드 A에 비재귀적 이벤트 리스너를 등록했다면, 클라이언트(110)는 노드 A에서만 이벤트가 발생했을 때만 통지 받을 것이다. 클라이언트(110)는 노드 A의 자손 노드에서 발생하는 이벤트의 통지를 받지 않는다. (일부 실시예에서, 클라이언트는 노드의 자식이 변경되면 통지 받을 수 있으나, 단 한번, 예컨대 첫번째만 통지 받을 수 있다.) 한편, 만약 클라이언트(110)이 노드 A에 재귀적 이벤트 리스너를 등록했다면, 클라이언트(110)는 노드 A 또는 트리 구조(130)에서 노드 A의 자손 노드에서의 이벤트의 발생을 통지 받을 것이다. 예를 들어, 만약 클라이언트(110)이 노드 A에 재귀적 이벤트 리스너를 등록했다면, 클라이언트(110)은 노드 A 및/또는 노드 A의 임의의 자손 노드, 즉 노드 B 내지 F에서 발생하는 이벤트의 발생 통지를 받을 것이다. 유사하게, 만약 재귀적 이벤트 리스너가 노드 B에 등록됐다면, 클라이언트(110)은 노드 B 또는 그 자손 노드 E 및 F에서 발생하는 이벤트의 발생 통지를 받을 것이다.
재귀적 이벤트 리스너를 노드에 등록하는 것은 구독자에게 노드 또는 그 자손 노드의 이벤트의 발생을 통지하기 때문에, 이 기술은 클라이언트가 노드의 자손 노드에 이벤트 리스너를 등록시킬 필요를 소멸시킨다. 이것은 모든 자손 노드에 비재귀적 이벤트 리스너를 등록하는데 소비되는 시간 및 네트워크 밴드폭을 감소시킨다. 나아가, 재귀적 이벤트 리스너 등록을 저장하는데 소비되는 메모리 역시 감소되는데, 단일 등록이 노드 및 그 자손 노드를 감시하기 위해 저장되기 때문이다. 한편, 통상적으로 비재귀적 등록의 경우 클라이언트(110)가 감시하기 원하는 노드 수만큼 많은 등록이 있다. 따라서, 재귀적 이벤트 리스너는 모든 시스템 퍼포먼스, 적어도 시간, 메모리 및 네트워크 밴드폭에 있어 계층적 데이터 구조를 가지는 애플리케이션의 현재 비재귀적 이벤트 리스너보다 상당한 향상을 가져온다.
도 2는 개시된 기술의 일실시예에 따른 계층적 데이터 구조의 노드 상에서의 재귀적 이벤트 리스너를 도시하는 블록도이다. 시스템(200)은 도 1의 환경(100) 또는 유사한 환경일 수 있다. 시스템(200)은 서버(215) 및 통신 네트워크(210)를 통해 서버(215)와 통신하는 클라이언트(205)를 포함한다. 클라이언트(205) 및 서버(215)는 동일한 물리적 장치 또는 상이한 장치 상에서 실행될 수 있다. 클라이언트(205)는 서버(215)의 트리 구조(220)에 재귀적 이벤트 리스너(245)의 등록을 요청할 수 있다. 예를 들어, 클라이언트(205)는 트리 구조(220)의 노드 B에 재귀적 이벤트 리스너(245)의 등록을 요청한다. 서버(215)와 통신하도록 설정된 수신 모듈(225)은 클라이언트(205)로부터 트리 구조(220)의 노드 B에 재귀적 이벤트 리스너(245)를 등록하도록 요청을 수신한다.
등록 모듈(230)은 재귀적 이벤트 리스너(245)를 트리 구조(220)의 노드 B에 등록한다. 나아가, 등록 모듈(230)은 서버의 메모리 내의 노드 B에 대응하는 필드(예를 들어, 비트 하나 또는 비트들의 집합)를 기결정된 값으로 설정하여 재귀적 이벤트 리스너(245)가 노드 B에 등록됐음을 표시한다. 노드 B에 등록된 재귀적 이벤트 리스너(245)는 클라이언트(205)에게 노드 B에서의 이벤트의 발생을 통지한다. 노드 B에 재귀적 이벤트 리스너(245)를 등록한 후, 계층 결정 모듈(235)는 노드 B가 트리 구조(220)에서 자손 노드를 가지는지 결정한다. 노드 B가 자손 노드 E 및 F를 가진다는 결정에 응답하여, 계층 이벤트 처리 모듈(240)은 노드 B에 등록된 재귀적 이벤트 리스너(245)를 노드 B에 더하여 노드 E 또는 F에서의 이벤트의 발생을 듣고 통지하도록 설정한다. 재귀적 이벤트 리스너(245)는 클라이언트(205)에게 트리 구조(220)에서 노드 B, E 또는 F 중 적어도 하나에서의 이벤트의 발생을 통지한다. 따라서, 재귀적 이벤트 리스너(245)는 단지 하나의 노드에만 등록된 상태로 복수의 노드에서의 이벤트의 발생 통지를 획득하는 이점을 제공한다.
트리 구조(220)의 노드에서 발생할 수 있는 이벤트의 종류는 새로운 노드의 생성, 존재하는 노드의 수정 또는 존재하는 노드의 삭제를 포함한다. 노드 B, E 또는 F에서 발생하는 이벤트는 동일한 종류이거나 상이한 종류일 수 있다. 나아가, 이벤트 리스너(245)는 상술한 이벤트 종류 중 어떠한 것의 발생을 클라이언트에게 통지하도록 설정된다.
일실시예에서, 트리 구조(220)의 각 노드는 데이터베이스(250)와 같은 저장 유닛의 상이한 논리적 파티션을 나타낸다. 다른 실시예에서, 트리 구조(220)의 적어도 일부의 노드는 데이터베이스(245)의 상이한 논리적 파티션에 저장되는 데이터를 나타낸다. 예를 들어, 트리 구조(220)는 데이터베이스의 다수의 샤드 내에 다양한 사용자의 사용자 프로필 데이터를 가지는 사용자 데이터베이스를 나타낸다. 또 다른 실시예에서, 노드는 시스템(200)의 다른 엔티티를 나타낼 수 있다. 트리 구조(220)는 서버(215)의 메모리에 저장될 수 있다.
각 모듈, 즉 수신 모듈(225), 등록 모듈(230), 계층 결정 모듈(235) 및 계층 이벤트 처리 모듈(240)과 재귀적 이벤트 리스너(245)는 서버(215)와 같은 동일한 장치 또는 상이한 장치 상에서 구동되거나, 서버(215)와 통합되거나, 서버와 협력하여 구동될 수 있다.
클라이언트(205)는 또한 비재귀적 이벤트 리스너를 노드 A 내지 G 중 어디에도 등록할 수 있다. 일실시예에서, 만약 노드에서의 이벤트가 재귀적 이벤트 리스너 및 비재귀적 이벤트 리스너 양자에 의해 듣게 된다면, 클라이언트(205)에게 단 하나의 이벤트 발생 통지만 보내진다. 예를 들어, 클라이언트(205)가 재귀적 이벤트 리스너(245)를 노드 B에 등록하고 노드 B 또는 그 자손 노드 E 및 F에 비재귀 이벤트 리스너(도시되지 않음)을 등록했다면, 노드 B, E 또는 F에서의 이벤트가 발생했을 때, 클라이언트(205)는 노드 B, E 또는 F 중 임의의 것에서의 이벤트 발생에 관한 통지만을 받을 것이다. 클라이언트는 재귀적 이벤트 리스너와 비재귀적 이벤트 리스너에 대한 별개의 통지를 서버로부터 수신하지 않을 수 있다.
노드, 예컨대 노드 B에 등록된 재귀적 이벤트 리스너(245)는 클라이언트(205)가 노드 B, E 또는 F에서의 이벤트 발생을 통지받은 이후에도 유지된다. 한편. 노드에 등록된 비재귀적 이벤트 리스너는 클라이언트(205)가 노드에서의 이벤트 발생을 통지받은 후 제거된다. 비재귀적 이벤트 리스너는 노드로부터 이벤트 발생 통지를 계속 획득하기 위하여 다시 등록되어야 한다. 재귀적 이벤트 리스너(245)는 비재귀적 이벤트 리스너와는 달리 노드에서의 이벤트 발생 통지를 계속 획득하기 위하여 다시 등록될 필요가 없다. 따라서, 재귀적 이벤트 리스너(245)는 적어도 노드에 재귀적 이벤트 리스너의 등록에 필요한 시간 및 네트워크 밴드폭에 있어서 비재귀적 이벤트 리스너와 비교했을 때 효율적이다.
재귀적 이벤트 리스너를 계층적 데이터 구조의 노드 상에 등록하기 위한 방법
도 3은 개시된 기술의 일실시예에 따라 재귀적 이벤트 리스너를 계층적 데이터 구조의 노드 상에 등록하는 프로세스(300)의 흐름도이다. 프로세스(300)은 도 2의 시스템(200)과 같은 시스템에서 구현될 수 있다. 단계 305에서, 서버(또는 서버와 협력하여 작동하는 수신 모듈)은 클라이언트로부터 소스 노드에 이벤트 리스너를 등록하기 위한 요청을 수신한다. 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이다. 노드의 각각은 계층 내에서 데이터베이스의 상이한 논리적 파티션을 나타낸다. 단계 310에서, 서버(또는 서버와 협력하여 작동하는 등록 모듈)는 소스 노드에 이벤트 리스너를 등록하고 이벤트 리스너를 클라이언트에게 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정한다.
단계 315에서, 서버(또는 서버와 협력하여 작동하는 계층 결정 모듈)는 소스 노드가 계층 내에 자손 노드를 가지는지 여부를 결정한다. 소스 노드가 계층 내에 자손 노드를 가지지 않는다는 결정에 응답하여, 프로세스(300)은 단계 330으로 리턴한다. 한편, 소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 단계 320에서, 서버(또는 서버와 협력하여 작동하는 계층 이벤트 처리 모듈)은 자손 노드에 다른 이벤트 리스너의 등록 요청 없이, 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 통지하도록 설정한다.
단계 325에 표시된 바와 같이, 소스 노드에서의 제1 이벤트 또는 자손 노드에서의 제2 이벤트가 발생할 때, 이벤트 리스너는 클라이언트에게 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지한다.
도 4는 개시된 기술의 일실시예에 따른 계층적 데이터 구조의 노드에서 이벤트의 발생을 통지하는 프로세스(400)의 흐름도이다. 프로세스(400)은 도 2의 시스템(200)과 같은 시스템에서 구현될 수 있다. 단계 405에서, 서버가 서버 내의 노드에서 이벤트가 발생했는지 여부를 결정한다. 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이다. 노드에서 이벤트가 발생하지 않았다는 결정에 응답하여, 프로세스는 단계 435로 리턴한다.
한편, 노드에서 이벤트가 발생했다는 결정에 응답하여, 단계 410에서, 서버가 노드에 클라이언트에 의해 이벤트 리스너가 등록됐는지 여부를 결정한다. 노드에 이벤트 리스너가 등록됐다는 결정에 응답하여, 단계 430에서, 이벤트 리스너가 노드에서의 이벤트의 발생을 통지한다. 한편, 소스 노드에 이벤트 리스너가 등록되지 않았다는 결정에 응답하여, 결정 단계 415에서, 서버가 소스 노드가 계층 내에 선조 노드를 가지는지 여부를 결정한다. 소스 노드가 계층 내에 선조 노드를 가지지 않는다는 결정에 응답하여, 프로세스(400)은 단계 435로 리턴한다.
한편, 소스 노드가 계층 내에 선조 노드를 가진다는 결정에 응답하여, 결정 단계 420에서, 서버가 선조 노드에 이벤트 리스너가 등록됐는지 여부를 결정한다. 선조 노드에 이벤트 리스너가 등록됐다는 결정에 응답하여, 단계 430에서, 이벤트 리스너가 클라이언트에게 노드에서의 이벤트의 발생을 통지한다. 한편, 선조 노드에 이벤트 리스너가 등록되지 않았다는 결정에 응답하여, 결정 단계 425에서, 서버는 선조 노드가 계층의 루트 노드인지 여부를 결정한다. 선조 노드가 계층의 루트 노드가 아니라는 결정에 응답하여, 프로세스의 제어는 단계 415로 이동한다. 한편, 선조 노드가 계층의 루트 노드라는 결정에 응답하여, 서버는 재귀적 이벤트 리스너가 노드 또는 선조 노드에 등록되지 않았다는 것을 깨닫고 프로세스(400)는 단계 435로 리턴한다.
도시된 바와 같이, 단 하나의 노드에 등록된 재귀적 이벤트 리스너가 복수의 노드, 즉 재귀적 이벤트 리스너가 등록된 노드 및 노드의 자손 노드에서의 이벤트의 발생을 통지하는 이점을 제공한다.
작동의 예시
도 5는 개시된 기술의 일실시예에 따른, 도 1에 도시된 바와 같은 코디네이션 서비스(Coordination Service)에서 재귀적 이벤트 리스너의 사용을 도시하는 예시를 제공한다. 코디네이션 서비스(500)은 계층적 데이터 구조(515)와 같은 사용자 데이터베이스(510)에서 획득하는 사용자 프로필 데이터를 나타내는 서버(505)를 포함한다. 데이터베이스(510)는 복수의 사용자의 데이터, 예컨대 소셜 네트워킹 애플리케이션의 사용자들의 데이터를 포함할 수 있다. 데이터베이스(510)는 복수의 논리적 파티션, 즉 LP1, LP2 내지 LPn 등등을 포함한다. 각 논리적 파티션은 사용자 데이터베이스(510)로부터의 변경가능한 수의 사용자의 데이터를 저장한다. 계층적 데이터 구조(515)에서, 사용자 데이터베이스(510)는 루트 노드로 간주되고 사용자 데이터베이스(510)의 논리적 파티션은 루트 노드의 자손 노드로 간주될 수 있다.
클라이언트는 재귀적 이벤트 리스너, 비재귀적 이벤트 리스너 또는 양자를 계층적 데이터 구조(515)의 임의의 노드에 등록하기 위한 요청을 할 수 있다. 예를 들어, 클라이언트(525)가 루트 노드인 사용자 데이터베이스(510)에 등록된 재귀적 이벤트 리스너를 가지고, 클라이언트(530)는 자손 노드 LP2에 등록된 재귀적 이벤트 리스너와 비재귀적 이벤트 리스너를 가지고, 클라이언트(535)는 루트 노드인 사용자 데이터베이스(510)에 등록된 비재귀적 이벤트 리스너를 가지는 시나리오를 고려한다. 모든 이벤트 리스너, 즉 재귀적 및 비재귀적 이벤트 리스너는 계층적 데이터 구조(515)에서 발생하는 생성, 삭제 및 수정과 같은 다양한 이벤트 종류 중 임의의 발생을 클라이언트에게 통지할 수 있다.
예를 들어, 계층적 데이터 구조(515)에서 발생하는 LPn + 1(520)와 같은 새로운 논리적 파티션의 생성을 가정한다. 클라이언트(525)의 재귀적 이벤트 리스너가 루트 노드인 사용자 데이터베이스(510)와 자손 노드에서의 이벤트의 발생을 듣기 때문에, 클라이언트(525)는 새로운 자손 노드 LPn +1(525)의 생성을 통지 받을 것이다. 클라이언트(530)와 관련하여, 클라이언트(530)에 의해 자손 노드 LP2에 등록된 이벤트 리스너가 재귀적 또는 비재귀적인지 상관없이, 자손 노드(520)의 생성은 노드 LP2 또는 노드 LP2의 자손 노드에서 발생한 이벤트가 아니기 때문에, 클라이언트(530)는 자손 노드(520)의 생성을 통지 받지 않을 것이다. 클라이언트(535)와 관련하여, 루트 노드(510)에 등록된 비재귀적 이벤트 리스너는 노드(510)에 발생하는 이벤트만을 듣고 그러므로, 새로운 자손 노드(520)의 생성을 모를 것이다. 따라서, 클라이언트(535)는 계층적 데이터 구조에서 새로운 자손 노드(520)의 생성의 발생을 통지 받지 않을 것이다.
서버(505)는 재귀적 이벤트 리스너 등록에 대한 접근 제어 기능을 제공할 수 있다. 예를 들어, 루트 노드에의 재귀적 이벤트 리스너의 등록은 사용자의 집합 또는 사용자 역할, 예컨대 관리자 역할 또는 슈퍼바이저(supervisor) 역할 등등으로 제한될 수 있다. 접근 제어 기능은 (i) 임의의 노드에 재귀적 이벤트 리스너를 등록하고, (ii) 특정 이벤트 종류에 대한 재귀적 이벤트 리스너를 등록하고, (iii) 계층의 특정 경로를 따르는 재귀적 이벤트 리스너를 등록하는 등등이 허용되는 사용자 집합 또는 사용자 역할 또한 명시할 수 있다.
나아가, 서버는 재귀적 이벤트 리스너에 대한 필터도 제공할 수 있다. 필터는 이벤트 리스너가 듣도록 설정되는 계층적 데이터 구조에서의 경로, 들을 이벤트의 종류 등등을 명시할 수 있다. 예를 들어, 도 2의 트리 구조(220)에서, 필터는 루트 노드 A에 등록된 재귀적 이벤트 리스너에 적용되어 경로 A-B-F를 따르는 노드에서 발생하는 이벤트만 들을 수 있다. 다른 예시로서, 필터는 삭제 종류의 이벤트의 발생만 통지되도록 명시할 수 있다.
일부 실시예에서, 네트워크 파티션, 클라이언트 또는 서버 실패와 같은 실패가 클라이언트가 서버로부터의 연결 해제를 일으킬 수 있다. 서버는 자동으로 그 클라이언트와 연관된 재귀적 이벤트 리스너를 등록 해제하고, 클라이언트는 서버로부터 이벤트 통지의 수신을 멈춘다. 클라이언트는 재귀적 이벤트 리스너를 새로운 서버에 재등록하는 시도를 하고 연결이 해제된 동안 발생한 것을 포함하여 이벤트 통지를 계속 수신할 수 있다. 이 방법에서 클라이언트는 주어진 노드의 계층 하에서 발생한 모든 이벤트를 수신하고, 클라이언트측 애플리케이션에 의해 유지된 노드 구조가 서버측과 매치하는 것으로 가정한다.
이 메커니즘 없이, 노드 구조가 실패 동안 변경됐을 수 있기 때문에 클라이언트는 재연결 후 및 재귀적 이벤트 리스너를 등록하기 전 모든 계층을 탐색해야 할 수 있다. 적어도 일부 실시예에서, 데이터베이스 하에서 생긴 노드 구조의 각 수정(예컨대, 생성, 수정, 삭제)은 트랜잭션 수로 주어진다. 클라이언트가 서버로부터 노드를 읽을 때마다, 노드를 수정한 최신 트랜젝션 수도 수신한다. 클라이언트가 재연결을 시도할 때, 트랜잭션 수를 제공함으로써 노드에 재귀적 이벤트 리스너를 등록할 수 있다. 제공된 트랜잭션 수에 대응하는 이벤트가 발생했기 때문에 서버는 발생한 모든 이벤트의 통지를 전달하려고 시도한다.
서버는 노드 계층을 순회하여(traverses) 클라이언트에게 전달될 필요가 있는 이벤트를 결정한다. 나아가, 삭제된 노드는 주어진 노드의 현재 계층을 순회함으로써 결정될 수 없기 때문에, 삭제된 노드의 리스트를 결정하기 위하여 서버는 이벤트의 이력(예를 들어, 데이터베이스에 로그로 저장된)을 참조한다. 적어도 일부 실시예에서, 클라이언트에게 전송되는 이벤트의 리스트는 연관된 트랜잭션 수에 따라 정렬된다.
도 6은 개시된 기술의 일실시예에 따라 클라이언트와 서버 간 통신 실패에 응답하여 클라이언트에 의해 재귀적 이벤트 리스너를 재등록하는 프로세스(600)를 도시하는 흐름도이다. 프로세스(600)는 시스템(200)과 같은 시스템에서 실행될 수 있다. 결정 단계 605에서, 서버는 주어진 트랜잭션 수가 기정의된 임계 시간보다 오래 됐는지 여부를 결정한다. 적어도 일부 실시예에서, 서버는 특정 기정의된 기간 동안의 이벤트 이력을 저정한다. 만약 서버가 트랜잭션이 기정의된 임계 시간보다 오래된 것으로 결정했다면, 단계 610에서, 서버는 재귀적 이벤트 리스너의 등록 요청을 거절한다. 적어도 일부 실시예에서, 클라이언트는 요청에서 트랜잭션 수를 생략함으로써 요청을 재시도할 수 있다.
한편, 만약 서버가 트랜잭션이 기정의된 임계 시간보다 오래 되지 않은 것으로 결정했다면, 결정 단계 615에서 서버가 주어진 노드의 계층이 방문하지 않은 노드, 즉 삭제된 노드를 가지는지 결정한다. 만약 방문하지 않은 노드가 있다면, 단계 645에서, 서버가 각 방문하지 않은 노드에 대한 삭제 이벤트를 이벤트의 리스트에 추가한다. 일부 실시예에서, 서버는 데이터베이스에 저장된 이벤트의 로그(트랜잭션 이력)를 읽음으로써 삭제된 노드를 결정할 수 있다. 한편, 만약 서버가 삭제된 노드가 없는 것으로 결정했다면, 결정 단계 620에서, 서버는 현재 노드가 트랜잭션(주어진 트랜잭션 수에 대응)의 발생 이후 생성됐는지 여부를 결정한다.
만약 서버가 현재 노드가 트랜잭션 이후 추가된 것으로 결정했다면, 단계 625에서, 서버는 노드 생성 이벤트를 리스트에 추가하고, 제어를 단계 640으로 옮긴다. 한편, 만약 서버가 현재 노드가 트랜잭션 이후 추가되지 않은 것으로 결정했다면, 결정 단계 630에서, 서버는 현재 노드가 트랜잭션 이후 수정됐는지 여부를 결정한다. 만약 서버가 현재 노드가 트랜잭션 이후 수정된 것으로 결정했다면, 단계 635에서, 서버는 노드 수정 이벤트를 리스트에 추가하고, 제어를 단계 640으로 옮긴다. 단계 640에서, 서버는 계층 내의 다음 자손 노드로 순회한다. 적어도 일부 실시예에서, 서버는 너비 우선 탐색(breadth-first search) 순으로 계층을 순회한다. 서버가 주어진 노드의 계층 전체를 순회한 후, 단계 650에서, 서버는 이벤트의 리스트를 연관된 이벤트의 트랜잭션 수에 따라 정렬하고, 단계 655에서, 클라이언트에게 이벤트의 리스트를 전달한다.
구현을 위한 장치
도 7은 개시된 기술에 따른 다양한 동작을 수행하고, 그러한 동작에 의해 생성 및/또는 사용되는 다양한 정보를 저장할 수 있는 장치의 블록도이다. 장치는 본 명세서에 기재된 임의의 컴퓨터를 나타낼 수 있다. 컴퓨터(700)는 도 1 내지 6(및 본 명세서에 기재된 임의의 다른 요소)의 예시에서 도시된 임의의 엔티티, 요소 또는 서비스, 예컨대 코디네이션 서비스, 서버, 클라이언트, 데이터베이스, 트리 구조 등등이 구현될 수 있는 하드웨어 장치를 도시하기 위한 것이다. 컴퓨터(700)는 하나 이상의 프로세서(701) 및 인터커넥트(703)를 통해 연결되는 메모리(702)를 포함한다. 도 7에 도시된 인터커넥트(703)는 임의의 하나 이상의 별도의 물리적 버스, 포인트 대 포인트 연결 또는 적절한 브릿지, 어댑터 또는 컨트롤러로 연결되는 이들 모두를 표현하는 추상적 개념이다. 따라서, 인터커넥트(703)는 예컨대 시스템 버스, PCI(Peripheral Component Interconnect) 버스나 PCI-익스프레스(PCI-Express) 버스, 하이퍼트랜스포트(HyperTransport) 또는 ISA(industry standard architecture) 버스, SCSI(small computer system interface) 버스, USB(universal serial bus), IIC(I2C) 버스 또는 때때로 "Firewire"라고 하는 IEEE(Institute of Electrical and Electronics Engineers) 표준 1394 버스를 포함할 수 있다.
프로세서(들)(701)는 컴퓨터(700)의 중앙 처리 유닛(CPU)을 포함할 수 있고, 따라서 컴퓨터(700)의 전체 구동을 제어한다. 특정 실시예로, 프로세서(들)(701)는 메모리(702)에 저장된 소프트웨어 또는 펌웨어를 실행하여 이를 달성한다. 프로세서(들)(701)는 하나 이상의 프로그램가능한 범용 또는 특수용 마이크로프로세서, 디지털 신호 프로세서(DSPs), 프로그램가능한 컨트롤러, 주문형 집적회로(application specific integrated circuits; ASICs), 프로그램가능한 논리 장치(PLDs), 보안 플랫폼 모듈(trusted platform modules; TPMs) 등 또는 이런 장치의 조합이거나 이를 포함할 수 있다.
메모리(702)는 컴퓨터(700)의 메인 메모리이거나 포함한다. 메모리(702)는 임의의 형태의 랜덤 액세스 메모리(RAM), 읽기-전용 메모리(ROM), 플래시 메모리 등 또는 이런 장치의 조합을 나타낸다. 사용시, 메모리(702)는 코드를 포함할 수 있다. 일실시예에서, 코드는 컴퓨터 버스 인터페이스를 통해 수신된 범용 프로그램을 인식하고, 프로세서에서 실행하기 위해 범용 프로그램을 준비하도록 설정된 범용 프로그래밍 모듈을 포함한다. 다른 실시예에서, 범용 프로그래밍 모듈은 ASICs, PLDs 또는 필드 프로그래머블 게이트 어레이(field-programmable gate arrays; FPGAs)와 같은 하드웨어 회로를 사용하여 구현될 수 있다.
또한, 네트워크 어댑터(707), 저장 장치(들)(705) 및 I/O 장치(들)(706)는 인터커넥트(703)를 통해 프로세서(들)(701)와 연결된다. 네트워크 어댑터(707)는 네트워크를 통해 원격 장치와 통신하는 능력을 컴퓨터(700)에 제공하며, 이 어댑터는 예컨대 이더넷 어댑터 또는 광섬유 채널 어댑터일 수 있다. 네트워크 어댑터(707)는 컴퓨터(700)에 클러스터 내에서 다른 컴퓨터들과 통신하는 능력 또한 제공할 수 있다. 일부 실시예에서, 컴퓨터(700)는 하나 이상의 네트워크 어댑터를 사용하여 클러스터 내에서 및 클러스터 밖에서 별도로 다룰 수 있다.
I/O 장치(들)(706)는 예컨대, 키보드, 마우스 또는 다른 포인팅 장치, 디스크 드라이브, 프린터, 스캐너 및 디스플레이 장치를 포함하여 다른 입력 및/또는 출력 장치를 포함할 수 있다. 디스플레이 장치는 예컨대, 음극선관(CRT), 액정 디스플레이(LCD) 또는 다른 적용가능한 알려지거나 편리한 디스플레이 장치를 포함할 수 있다.
메모리(702)에 저장된 코드는 소프트웨어 및/또는 펌웨어로 구현되어 프로세서(들)(701)이 상술한 행동을 수행하도록 프로그램할 수 있다. 특정 실시예에서, 그런 소프트웨어 또는 펌웨어는 컴퓨터(700)를 통해(예를 들어, 네트워크 어댑터(707)를 거쳐) 원격 시스템으로부터 다운로드함으로써 컴퓨터(700)에 처음에 제공될 수 있다.
본 명세서에 소개된 기술은 예를 들어, 소프트웨어 및/또는 펌웨어로 프로그램된 프로그램 가능한 회로(예를 들어, 하나 이상의 마이크로프로세서) 또는 완전히 특수용 하드웨어 내장(비-프로그램 가능한) 회로, 또는 이런 형태의 조합에 의해 구현될 수 있다. 특수용 하드웨어 내장 회로는 예를 들어 하나 이상의 ASICs, PLDs, FPGAs 기타 등등의 형태일 수 있다.
본 명세서에 소개된 기술의 구현에 있어 사용을 위한 소프트웨어 또는 펌웨어는 기계-판독가능한 저장 매체(machine-readable storage medium)에 저장되고 하나 이상의 범용 또는 특수용 프로그램가능 마이크로프로세서에 의해 실행될 수 있다. 본 명세서에서 사용되는 용어 "기계-판독가능한 저장 매체"는 기계에 의해 접근 가능한 형태의 정보를 저장할 수 있는 임의의 메커니즘을 포함한다.
기계는 서버 컴퓨터, 클라이언트 컴퓨터, 개인용 컴퓨터(PC), 태블릿 PC, 랩탑 컴퓨터, 셋톱박스(STB), 개인용 정보 단말기(PDA), 휴대 전화, 아이폰, 블랙베리, 프로세서, 전화, 웹 어플라이언스(web appliance), 네트워크 라우터, 스위치 또는 브릿지 또는 그 기계가 취할 수 있는 행동을 명시하는 명령어의 세트(순차적 또는 그렇지 않은)를 실행할 수 있는 임의의 기계일 수 있다.
기계-접근가능한 저장 매체 또는 저장 장치(들)(705)는 예컨대, 판독가능/비-판독가능 매체(예를 들어 ROM; RAM; 자기 디스크 저장 매체; 광학 저장 매체; 플래시 메모리 장치; 기타 등등), 기타 등등 또는 그들의 임의의 조합을 포함한다. 통상, 저장매체는 비-일시적일 수 있거나 비-일시적 장치를 포함할 수 있다. 이와 관련하여, 비-일시적 저장매체는 장치가 그 물리적 상태를 변화시킬 수 있지만 장치가 구체적인 물리적 형태를 의미하는 유형의 장치를 포함할 수 있다. 따라서, 예컨대, 비-일시적은 그 상태 변화에도 불구하고 유형의 상태를 유지하는 장치를 말한다.
본 명세서에 사용되는 용어 "논리"는 예를 들어 특정 소프트웨어 및/또는 펌웨어로 프로그램된 프로그램가능한 회로, 특수용 하드웨어 내장 회로, 또는 그들의 조합을 포함할 수 있다.

Claims (20)

  1. 컴퓨터 네트워크의 컴퓨터 시스템에서, 컴퓨터 시스템의 클라이언트로부터 소스 노드에 이벤트 리스너를 등록하기 위한 요청을 수신하는 단계;
    컴퓨터 시스템의 서버에 의해, 소스 노드에 이벤트 리스너를 등록하는 단계;
    서버에 의해, 소스 노드가 계층 내에 자손 노드를 가지는지 여부를 결정하는 단계; 및
    소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 서버에 의해, 자손 노드에 다른 이벤트 리스너의 등록 요청 없이 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 통지하도록 설정하는 단계를 포함하고,
    상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이고, 상기 노드의 각각은 컴퓨터 시스템의 저장 장치의 논리적 파티션을 나타내고, 상기 저장 장치는 복수의 논리적 파티션을 포함하고, 상기 논리적 파티션의 각각은 저장 장치에 저장된 데이터의 별개의 겹치지 않는 서브셋을 포함하고,
    상기 이벤트 리스너는 클라이언트에게 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정되는 방법.
  2. 청구항 1에 있어서,
    소스 노드에서의 제1 이벤트 또는 자손 노드에서의 제2 이벤트 중 적어도 하나가 발생할 때, 클라이언트에게 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지하는 단계를 더 포함하는 방법.
  3. 청구항 2에 있어서,
    상기 소스 노드에 이벤트 리스너를 등록하는 단계는
    이벤트 리스너를 제1 이벤트 또는 제2 이벤트의 발생을 클라이언트에게 통지한 이후에도 유지하는 단계; 및
    클라이언트에 의해 제거될 때까지 이벤트 리스너를 유지하는 단계를 포함하는 방법.
  4. 청구항 2에 있어서,
    상기 클라이언트에게 제1 이벤트 또는 제2 이벤트의 발생을 통지하는 단계는
    제1 이벤트의 발생을 듣는 단계;
    소스 노드에 대응하는 서버의 메모리 내의 필드가 자손 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 요청 없이 제2 이벤트의 발생을 듣는 단계; 및
    클라이언트에게 소스 노드에서의 제1 이벤트의 발생 또는 자손 노드에서의 제2 이벤트의 발생을 통지하는 단계를 포함하고,
    상기 제1 이벤트의 발생을 듣는 단계는 서버에 의해 소스 노드에 대응하는 서버의 메모리 내의 필드가 소스 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 단계를 포함하는 방법.
  5. 청구항 1에 있어서,
    상기 소스 노드에 이벤트 리스너를 등록하는 단계는
    이벤트 리스너를 클라이언트에게 기결정된 타입의 제1 이벤트 또는 제2 이벤트의 발생을 통지하도록 설정하는 단계를 포함하는 방법.
  6. 청구항 5에 있어서,
    상기 기결정된 타입의 제1 이벤트 또는 제2 이벤트는 (i) 새로운 노드의 생성, (ii) 기존 노드의 삭제 또는 (iii) 기존 노드의 수정 중 적어도 하나를 포함하는 방법.
  7. 청구항 1에 있어서,
    상기 제1 이벤트 및 제2 이벤트는 동일한 기결정된 타입의 이벤트인 방법.
  8. 청구항 1에 있어서,
    상기 제1 이벤트 및 제2 이벤트는 상이한 기결정된 타입의 이벤트인 방법.
  9. 청구항 1에 있어서,
    이벤트 리스너가 자손 노드에서의 제2 이벤트의 발생을 클라이언트에게 통지하도록 설정하는 단계는
    이벤트 리스너가 자손 노드에서의 이벤트의 발생을 클라이언트에게 계층 내에서 소스 노드로부터 시작되는 선택된 경로를 따라 통지하도록 설정하는 단계를 포함하는 방법.
  10. 청구항 1에 있어서,
    소스 노드에 이벤트 리스너를 등록하는 단계는
    접근 제어를 설정함으로써 소스 노드에의 이벤트 리스너의 등록을 컴퓨터 시스템에서 사용자 역할의 기결정된 집합으로 제한하는 단계를 포함하는 방법.
  11. 컴퓨터 네트워크의 컴퓨터 시스템에 의해, 컴퓨터 시스템의 서버 내의 소스 노드에서 이벤트가 발생했는지 여부를 결정하는 단계; 및
    소스 노드에서 이벤트가 발생했다는 결정에 응답하여,
    서버에 의해, 소스 노드에 컴퓨터 시스템의 클라이언트에 의해 이벤트 리스너가 등록됐는지 여부를 결정하는 단계;
    소스 노드에 이벤트 리스너가 등록됐다는 결정에 응답하여, 클라이언트에게 소스 노드에서의 이벤트의 발생을 통지하는 단계; 및
    소스 노드에 이벤트 리스너가 등록되지 않았다는 결정에 응답하여,
    서버에 의해, 소스 노드가 계층 내에 선조 노드를 가지는지 여부를 결정하는 단계;
    소스 노드가 계층 내에 선조 노드를 가진다는 결정에 응답하여,
    서버에 의해, 선조 노드에 이벤트 리스너가 등록됐는지 여부를 결정하는 단계; 및
    선조 노드에 이벤트 리스너가 등록됐다는 결정에 응답하여, 클라이언트에게 소스 노드에서의 이벤트의 발생을 통지하는 단계를 포함하고,
    상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이고, 상기 노드의 각각은 컴퓨터 시스템의 저장 장치의 논리적 파티션을 나타내고, 상기 저장 장치는 복수의 논리적 파티션을 포함하고, 상기 논리적 파티션의 각각은 저장 장치에 저장된 데이터의 별개의 겹치지 않는 서브셋을 포함하는 방법.
  12. 청구항 11에 있어서,
    소스 노드에 등록된 상기 이벤트 리스너는 클라이언트에게 이벤트의 발생을 통지하는 행동 이후에도 유지되는 방법.
  13. 청구항 11에 있어서,
    상기 이벤트는 (i) 새로운 노드의 생성, (ii) 기존 노드의 삭제 또는 (iii) 기존 노드의 수정 중 적어도 하나를 포함하는 방법.
  14. 청구항 11에 있어서,
    서버와 클라이언트 간 통신 실패에 응답하여, 클라이언트로부터 새로운 서버의 소스 노드에 새로운 이벤트 리스너를 등록하도록 하는 요청을 수신하는 단계;
    새로운 서버에 의해 트랜잭션 수(transaction number)를 사용하여, 최근 이벤트가 수신된 시간으로부터 소스 노드 및 소스 노드의 자손에서 발생한 이벤트의 리스트를 획득하는 단계; 및
    새로운 서버에 의해 클라이언트로 이벤트의 리스트를 송신하는 단계를 더 포함하고,
    상기 새로운 서버는 계층 내에서 노드의 적어도 일부분의 복사본을 가지고, 상기 요청은 서버로부터 수신한 최근 이벤트의 트랜잭션 수를 포함하는 방법.
  15. 서버;
    서버 장치와 협력하여 클라이언트로부터 소스 노드에 이벤트 리스너를 등록하기 위한 요청을 수신하도록 설정된 수신 모듈;
    수신 모듈과 협력하여 소스 노드에 이벤트 리스너를 등록하도록 설정된 등록 모듈;
    등록 모듈과 협력하여 소스 노드가 계층 내에 자손 노드를 가지는지 여부를 결정하도록 설정된 계층 결정 모듈; 및
    계층 결정 모듈과 협력하여 소스 노드가 계층 내에 자손 노드를 가진다는 결정에 응답하여, 자손 노드에 다른 이벤트 리스너의 등록 요청 없이 이벤트 리스너가 클라이언트에게 자손 노드에서의 제2 이벤트의 발생을 통지하도록 설정하도록 설정된 계층 이벤트 처리 모듈을 포함하고,
    상기 소스 노드는 계층 내에서 서로 연관된 복수의 노드 중 하나이고, 상기 노드의 각각은 저장 유닛의 논리적 파티션을 나타내고, 상기 저장 유닛은 복수의 논리적 파티션을 포함하고, 상기 논리적 파티션의 각각은 저장 유닛에 저장된 데이터의 별개의 겹치지 않는 서브셋을 포함하고,
    상기 이벤트 리스너는 클라이언트에게 소스 노드에서의 제1 이벤트의 발생을 통지하도록 설정되는 장치.
  16. 청구항 15에 있어서,
    상기 이벤트 리스너는 등록 모듈과 협력하여 소스 노드에서의 제1 이벤트 또는 자손 노드에서의 제2 이벤트 중 적어도 하나가 발생할 때, 클라이언트에게 제1 이벤트 또는 제2 이벤트 중 적어도 하나의 발생을 통지하도록 더 설정되는 장치.
  17. 청구항 16에 있어서,
    상기 이벤트 리스너는
    제1 이벤트의 발생을 듣고,
    소스 노드에 대응하는 서버의 메모리 내의 비트가 자손 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 요청 없이 제2 이벤트의 발생을 듣고, 및
    클라이언트에게 소스 노드에서의 제1 이벤트의 발생 또는 자손 노드에서의 제2 이벤트의 발생을 통지하도록 더 설정되고,
    상기 제1 이벤트의 발생을 듣는 것은 서버에 의해 소스 노드에 대응하는 서버의 메모리 내의 비트가 소스 노드에 이벤트 리스너의 등록을 표시하는 기결정된 값으로 설정됐는지 여부를 결정하는 것을 포함하는 장치.
  18. 청구항 15에 있어서,
    상기 이벤트 리스너는
    기결정된 타입의 이벤트의 발생을 통지하도록 더 설정되고,
    상기 기결정된 타입의 이벤트는 (i) 새로운 노드의 생성, (ii) 기존 노드의 삭제 또는 (iii) 기존 노드의 수정 중 적어도 하나를 포함하는 장치.
  19. 삭제
  20. 삭제
KR1020157022163A 2013-01-23 2014-01-17 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 KR101871383B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/748,173 US9680692B2 (en) 2013-01-23 2013-01-23 Method and system for using a recursive event listener on a node in hierarchical data structure
US13/748,173 2013-01-23
PCT/US2014/012121 WO2014116527A1 (en) 2013-01-23 2014-01-17 Method and system for using a recursive event listener on a node in hierarchical data structure

Publications (2)

Publication Number Publication Date
KR20150111952A KR20150111952A (ko) 2015-10-06
KR101871383B1 true KR101871383B1 (ko) 2018-06-26

Family

ID=51208628

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157022163A KR101871383B1 (ko) 2013-01-23 2014-01-17 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템

Country Status (11)

Country Link
US (1) US9680692B2 (ko)
EP (1) EP2948875B1 (ko)
JP (1) JP6325001B2 (ko)
KR (1) KR101871383B1 (ko)
CN (1) CN104969222A (ko)
AU (1) AU2014209697B9 (ko)
BR (1) BR112015016934A2 (ko)
CA (1) CA2896865C (ko)
IL (1) IL239769B (ko)
MX (1) MX353283B (ko)
WO (1) WO2014116527A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10623504B2 (en) * 2014-04-25 2020-04-14 Telefonaktiebolaget Lm Ericsson (Publ) Apparatus and method for managing client devices
EP3355261A4 (en) * 2015-09-25 2019-04-03 NEC Patent Service,Ltd. INFORMATION PROCESSING DEVICE, INFORMATION PROCESSING METHOD, AND PROGRAM RECORDING MEDIUM
KR101648568B1 (ko) 2016-03-09 2016-08-16 주식회사 티맥스 소프트 분산된 객체를 클러스터링하여 하나의 객체처럼 활용하는 방법 및 이를 사용한 분산 시스템
US10242111B2 (en) 2016-03-22 2019-03-26 International Business Machines Corporation Node controllers for hierarchical data structures
CN108073439A (zh) * 2016-11-11 2018-05-25 深圳业拓讯通信科技有限公司 一种jvm内存泄露自动检测方法以及系统
US20180205790A1 (en) * 2017-01-13 2018-07-19 Hewlett Packard Enterprise Development Lp Distributed data structure in a software defined networking environment
CN108984544B (zh) * 2017-05-31 2021-04-30 北京京东尚科信息技术有限公司 一种分布式系统修改配置信息的方法和装置
CN107729158B (zh) * 2017-09-20 2022-01-11 惠州Tcl移动通信有限公司 一种简化应用程序注册器的方法、存储介质及电子设备
CN108519908A (zh) * 2018-02-24 2018-09-11 国家计算机网络与信息安全管理中心 一种任务动态管理方法和装置
CN109525466B (zh) * 2019-01-03 2020-09-29 杭州云毅网络科技有限公司 数据节点监听方法、装置、电子设备及存储介质
US20220188143A1 (en) * 2020-12-11 2022-06-16 UiPath, Inc. Process mining for multi-instance processes
CN113553126B (zh) * 2021-07-06 2024-03-22 网易(杭州)网络有限公司 数据的处理方法和装置
CN114979150B (zh) * 2022-07-14 2022-10-28 北京长亭未来科技有限公司 一种分布式集群节点管理方法、系统、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100306786A1 (en) 2006-03-31 2010-12-02 Isilon Systems, Inc. Systems and methods for notifying listeners of events
US7908550B1 (en) 2000-12-12 2011-03-15 Oracle International Corporation Dynamic tree control system
US20110137963A1 (en) 2004-12-15 2011-06-09 Oracle International Corporation Performing an action in response to a file system event

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658450B1 (en) * 1999-01-29 2003-12-02 Avaya Technology Corp. Method and system for memory resident transient storage of data associated with a plurality of collaborating computer processes
US8489742B2 (en) * 2002-10-10 2013-07-16 Convergys Information Management Group, Inc. System and method for work management
JP4618724B2 (ja) * 2005-08-16 2011-01-26 財団法人電力中央研究所 データ処理システム並びにデータ処理システムにおける装置データの取得方法及び設定方法
US20070198629A1 (en) * 2006-02-21 2007-08-23 Nec Laboratories America, Inc. Scalable Content Based Event Multicast Platform
US8407179B2 (en) 2009-01-06 2013-03-26 TRUEANTHEM Corporation Method of determining influence of a member within a dataset
US9529648B2 (en) 2009-06-26 2016-12-27 International Business Machines Corporation Generic declaration of bindings between events and event handlers regardless of runtime structure
WO2011099649A1 (ja) * 2010-02-15 2011-08-18 日本電気株式会社 イベント配信装置、イベント配信システム、及び、イベント配信方法
US8528005B2 (en) * 2010-04-09 2013-09-03 Telefonaktiebolaget Lm Ericsson (Publ) Method and arrangement in an IPTV terminal

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7908550B1 (en) 2000-12-12 2011-03-15 Oracle International Corporation Dynamic tree control system
US20110137963A1 (en) 2004-12-15 2011-06-09 Oracle International Corporation Performing an action in response to a file system event
US20100306786A1 (en) 2006-03-31 2010-12-02 Isilon Systems, Inc. Systems and methods for notifying listeners of events

Also Published As

Publication number Publication date
IL239769A0 (en) 2015-08-31
CA2896865C (en) 2018-04-10
AU2014209697B2 (en) 2017-11-09
AU2014209697B9 (en) 2017-11-23
BR112015016934A2 (pt) 2017-07-11
EP2948875B1 (en) 2020-04-22
CN104969222A (zh) 2015-10-07
EP2948875A1 (en) 2015-12-02
MX2015009550A (es) 2016-04-15
MX353283B (es) 2018-01-08
JP6325001B2 (ja) 2018-05-16
KR20150111952A (ko) 2015-10-06
US20140207940A1 (en) 2014-07-24
US9680692B2 (en) 2017-06-13
JP2016508638A (ja) 2016-03-22
CA2896865A1 (en) 2014-07-31
IL239769B (en) 2018-01-31
EP2948875A4 (en) 2016-10-19
AU2014209697A1 (en) 2015-07-23
WO2014116527A1 (en) 2014-07-31

Similar Documents

Publication Publication Date Title
KR101871383B1 (ko) 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템
CN107315825B (zh) 一种索引更新系统、方法及装置
CN112261135A (zh) 基于一致性协议的节点选举方法、系统、装置及设备
CN106878382B (zh) 一种分布式仲裁集群中动态改变集群规模的方法及装置
CN111131079B (zh) 一种策略查询方法及装置
CN109167819B (zh) 数据同步系统、方法、装置及存储介质
US10853892B2 (en) Social networking relationships processing method, system, and storage medium
CN107818027B (zh) 名字节点主备切换的方法、装置和分布式系统
CN111104250A (zh) 用于数据处理的方法、设备和计算机程序产品
US9043274B1 (en) Updating local database and central database
CN113779412B (zh) 一种基于区块链网络的消息触达方法、节点和系统
CN111629054B (zh) 消息处理方法、装置、系统、电子设备及可读存储介质
CN109753292B (zh) 一种在多单实例数据库服务中部署多个应用的方法及装置
CN111478953A (zh) 服务器集群的自构建方法、装置、系统、设备及存储介质
KR102460910B1 (ko) 데이터 중복 방지를 위한 데이터 저장 방법 및 이를 적용한 데이터 플랫폼
US10938701B2 (en) Efficient heartbeat with remote servers by NAS cluster nodes
CN116431566B (zh) 数据迁移方法、装置、电子设备及介质
CN103856359A (zh) 获取信息的方法和系统
WO2021063242A1 (zh) 一种存储系统的元数据的发送方法及存储系统
CN114077639A (zh) 数据写入方法、装置、电子设备和存储介质
CN116846976A (zh) 数据管理方法、装置、服务器、存储介质及系统
CN114077619A (zh) 数据查询方法、装置、电子设备和存储介质
CN116341508A (zh) 报文模板的动态配置方法、装置、计算机设备及存储介质
CN117009983A (zh) 一种节点集群以及数据备份方法
CN115617390A (zh) 一种配置信息维护方法、电子设备及计算机可读存储介质

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant