클래스: Mongoid::Contextual::Mongo::DocumentsLoader Private

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음을 포함합니다.
연관 관계::EagerLoadable
다음에 정의됨:
lib/mongoid/contextual/mongo/documents_loader.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

제공된 기준에 맞는 문서를 로드합니다.

인스턴스 속성 요약 접기

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

연관 관계::EagerLoadable에 포함된 메서드

#eager_load, #eager_loadable?, #preload

생성자 세부 정보

#initialize(view, klass, criteria, executor: self.class.executor) ⇒ DocumentsLoader

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

문서 로더 인스턴스 를 인스턴스화하고 제공된 실행기를 사용하여 즉시 실행을 예약합니다.

매개변수:

  • 보기 (Mongo::Collection::View)

    컬렉션 뷰를 사용하여 데이터베이스 에서 레코드를 가져옵니다.

  • class (클래스)

    문서를 인스턴스화하는 Mongoid 모델 클래스입니다. 데이터베이스 에서 얻은 모든 레코드는 가능한 경우 이 클래스의 인스턴스 로 변환됩니다.

  • 기준 (Mongoid::Criteria)

    로드해야 하는 문서를 지정하는 기준입니다.

  • 실행기 (Concurrent::AbstractExecutorService) (기본값: self.class.executor)

    'Concurrent::Promises::Future` 인스턴스를 실행 수 있는 실행기입니다.



89
90
91
92
93
94
95
96
97
98
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 89

def 초기화(보기, class, 기준, 실행기: self.클래스.실행기)
  @view = 보기
  @klass = class
  @criteria = 기준
  @mutex = 뮤텍스.신규
  @ 상태 = :pending
  @future = Concurrent::Promises.future_on(실행기) do
    시작하기 && 실행
  end
end

인스턴스 속성 세부 정보

#criteriaMongoid::Criteria

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

로드해야 하는 문서를 지정하는 기준을 반환합니다. 여기에 노출된 이유는 `Association::EagerLoadable`의 'eager_loadable?` 메서드가 이를 사용할 수 있을 것으로 예상하기 때문입니다.

반환합니다:

  • (Mongoid::Criteria)

    로드해야 하는 문서를 지정하는 기준입니다. 여기에 노출된 이유는 `Association::EagerLoadable`의 'eager_loadable?` 메서드가 이를 사용할 수 있을 것으로 예상하기 때문입니다.



75
76
77
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 75

def 기준
  @criteria
end

클래스 메서드 세부 정보

.실행기(이름 = Mongoid.async_query_executor) ⇒ Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Mongoid 구성 옵션에 따라 적합한 실행기를 반환합니다.

매개변수:

  • 이름 (string | 기호) (기본값: Mongoid.async_query_executor)

    쿼리 실행기 이름은 :immediate 또는 :global_thread_pool일 수 있습니다. 기본값은 'async_query_executor' 구성 옵션입니다.

반환합니다:

  • (Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor)

    문서 로드 작업을 실행하는 데 사용되는 실행기입니다.

다음을 발생시킵니다.



61
62
63
64
65
66
67
68
69
70
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 61

def self.실행기(이름 = 몽고이드.async_query_executor)
  case 이름.to_sym
  when :immediate
    Immediate_executor
  when :global_thread_pool
    global_thread_pool_async_query_executor
  other
    올리다 오류::InvalidQueryExecutor.신규(이름)
  end
end

.global_thread_pool_async_query_executorConcurrent::ThreadPoolExecutor

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

async_query_executor 구성 옵션이 :global_thread_pool로 설정된 경우 사용할 비동기 실행기를 반환합니다. 이 실행기는 스레드 풀을 사용하여 백그라운드 스레드에서 작업을 실행합니다.

반환합니다:

  • (Concurrent::ThreadPoolExecutor)

    문서 로드 작업을 실행하는 데 사용되는 실행기입니다.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 32

def self.global_thread_pool_async_query_executor
  create_pool = Proc.신규 do |동시성|
    Concurrent::ThreadPoolExecutor.신규(
      min_threads: 0,
      max_threads: 동시성,
      max_queue: 동시성 * 4,
      fallback_policy: :caller_runs
    )
  end
  동시성 = 몽고이드.global_executor_concurrency || 4
  @@global_thread_pool_async_query_executor ||= create_pool.전화하기.(동시성)
  만약 @@global_thread_pool_async_query_executor.최대 길이 != 동시성
    old_pool = @@global_thread_pool_async_query_executor
    @@global_thread_pool_async_query_executor = create_pool.전화하기.(동시성)
    old_pool.종료됩니다
  end
  @@global_thread_pool_async_query_executor
end

.Immediate_executorConcurrent::ImmediateExecutor

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

async_query_executor 구성 옵션이 :immediate로 설정하다 경우 사용할 동기 실행기를 반환합니다. 이 실행기는 현재 스레드에서 모든 작업을 실행하고 필요에 따라 차단합니다.

반환합니다:

  • (Concurrent::ImmediateExecutor)

    문서 로드 작업을 실행하는 데 사용되는 실행기입니다.



22
23
24
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 22

def self.Immediate_executor
  @@immediate_executor ||= Concurrent::ImmediateExecutor.신규
end

인스턴스 메서드 세부 정보

#실행Array<Mongoid::Document>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

데이터베이스에서 '@criteria'로 지정된 레코드를 로드하고, 이를 '@klass' 유형의 Mongoid 문서로 변환합니다.

이 메서드는 로더의 인스턴스 를 생성할 때 예약된 작업 (비동기 가능성도 있음)에 의해 호출됩니다. 그러나 호출자 스레드에서 로드를 즉시 실행하려는 경우 이 메서드를 직접 호출할 수 있습니다.

이 메서드를 호출해도 로더의 상태 는 변경되지 않습니다.

반환합니다:

  • (Array<Mongoid::Document>)

    데이터베이스 에서 로드된 문서 의 배열입니다.



152
153
154
155
156
157
158
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 152

def 실행
  문서 = @view.map do |doc|
    공장.from_db(@klass, doc, @criteria)
  end
  Eager_load(문서) 만약 Eager_loadable?
  문서
end

#보류 중인가요?true | false

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

로더가 보류 상태 인지 여부에 관계없이 false 또는 true를 반환합니다.

보류 중 상태는 로더 실행이 예약되었지만 아직 시작되지 않았음을 의미합니다.

반환합니다:

  • (true | false)

    로더가 보류 상태이면 true이고, 그렇지 않으면 false입니다.



107
108
109
110
111
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 107

def 보류 중?
  @mutex.동기화 do
    @ 상태 == :pending
  end
end

#시작되었나요?true | false

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

로더가 시작 상태 인지 여부에 관계없이 false 또는 true를 반환합니다.

시작됨 상태 는 로더 실행이 시작되었음을 의미합니다. 실행이 완료된 후에도(성공 또는 실패) 로더는 이 상태 를 유지합니다.

반환합니다:

  • (true | false)

    로더가 시작 상태 이면 true 이고, 그렇지 않으면 false 입니다.



121
122
123
124
125
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 121

def 시작되었나요?
  @mutex.동기화 do
    @ 상태 == :started
  end
end

#unschedule객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

로더를 예약되지 않음으로 표시합니다.

로더가 예약되지 않은 것으로 표시되면 실행되지 않습니다. 문서를 로드할 수 있는 유일한 방법은 'execute' 메서드를 직접 호출하는 것입니다.

작업 실행이 이미 시작된 경우 예약을 취소해도 아무런 효과가 없습니다.



134
135
136
137
138
# 파일 'lib/mongoid/contextual/mongo/documents_loader.rb', 줄 134

def unschedule
  @mutex.동기화 do
    @ 상태 = :canceled 하지 않는 한 @ 상태 == :started
  end
end