2016-08-25 7 views
0

요즘 나는 캐시에서 loadCache, localLoadCache 및 쿼리 데이터에 대한 몇 가지 실험을했습니다. 그러나 나는 점점 더 혼란에 빠져 들었다. 여기 내 퍼즐이 있습니다. 설명하는 방법을 알고 있다면 도와주세요.loadCache() 및 localLoadCache()와 캐시의 데이터를 저장하는 논리

  1. loadCache와 localLoadCache의 차이점은 무엇입니까?
  2. 캐시의 데이터를 저장하는 논리는 무엇입니까? 예를 들어, 'A'노드를 시작합니다.이 노드의 캐시는 테이블 Person의 일부 데이터 (10 항목이라고 가정)를 DB에 저장합니다. 그런 다음 코드 내부에서 5 초마다 캐시의 데이터를 쿼리합니다. 그런 다음 'B'이라는 새 노드를 시작합니다.이 노드의 캐시는 테이블 Person의 다른 20 개의 항목 데이터를 DB에 저장하고 5 초마다 캐시에서 데이터를 쿼리합니다. 그러나 'A'및 'B'의 데이터를 쿼리하는 것이 30 개 항목 데이터 (10 + 20의 합계) 인 이유는 무엇입니까?

  3. B 새 항목 데이터를 캐시에 넣고 'A'도 새 데이터를 쿼리 할 수 ​​있습니까? B을 닫으면 A은 10 개의 항목 데이터를 쿼리합니다. 즉 첫 번째 것과 동일합니다. 왜?

답변

0

Ignite는 분산 데이터 저장소입니다. 데이터 세트를 분할하고 사용 가능한 노드에 균등하게 분배합니다. 예를 들어, 30 개의 항목과 2 개의 노드가있는 경우 각 노드에 약 15 개의 항목이 있습니다. 소유권은 Ignite에 의해 자동으로 정의되므로 특정 항목을 저장할 위치를 결정할 수 없습니다 (물론 할 수 있지만 이는 사소한 것입니다).

테이블이 캐시로로드되면 단일 데이터 세트로 처리됩니다. 캐시에서 항목을 가져 오면 저장 위치에 관계없이 투명하게 반환됩니다.

  1. 각 노드는 독립적으로 행 통해 DB 및 반복에서 전체 테이블을 가져온다 :

    는 로딩 된 바와 같이, 처리는 다음과 같다.

  2. 각 행에 대해 CacheStore 구현은 키 및 값 객체를 만들어 캐시로 전달합니다.
  3. 캐시는이 특정 키 - 값 쌍이 로컬 노드에 속하는지 여부를 결정합니다. 예인 경우 저장됩니다. 그렇지 않은 경우 삭제됩니다.
  4. 결과적으로 테이블은 분산 방식으로 클러스터에 완전히 저장되며 각 노드는 자체 데이터 하위 집합을 갖게됩니다.

localLoadCache 메서드는 로컬 노드에서만이 프로세스를 실행합니다 (특정 경우에 유용함). loadCache은 기본적으로 모든 노드에서 클로저를 브로드 캐스트하고 localLoadCache을 호출하는 바로 가기이므로 분산 된 데이터로드를 트리거합니다.

+0

양해 해 주셔서 감사합니다. 1. 캐시가 특정 키 - 값 쌍이 로컬 노드에 속하는지 여부를 결정하는 방법은 무엇입니까? 일부 알고리즘이 있습니까? 2. 말했듯이, loadCache는 분산 데이터 로딩을 트리거합니다. 그리고 localLoadCache는 분산 데이터 로딩을 트리거할까요? –

+0

1. 기본적으로 Randezous hashing 알고리즘이 사용됩니다 (https://en.wikipedia.org/wiki/Rendezvous_hashing). 2.'localLoadCache'는 로컬에서만로드됩니다. 그러나 일반적으로 전체 테이블을로드하지 않으므로 하나의 노드에서만로드하는 것이 적절하지 않습니다. 이 방법은 사용자가 어떤 이유로 든 모든 노드에서 수동으로 프로세스를 트리거하려고하는 경우에 사용됩니다. –