모듈: Mongoid::Tasks::Database
개요
데이터베이스 컬렉션, 인덱스, 샤딩 등을 관리 유틸리티 모듈입니다. Rake 작업에서 호출됩니다.
인스턴스 메서드 요약 접기
-
#create_collections(models = ::Mongoid.models, force: false) ⇒ 객체
제공된 glob이 주어지면 각 모델에 대한 컬렉션을 생성하면 클래스가 포함되지 않습니다.
-
#create_indexes(models = ::Mongoid.models) ⇒ Array<Class>
제공된 glob이 주어지면 각 모델에 대한 인덱스를 생성하며 클래스는 포함되지 않습니다.
-
#create_search_indexes(models = ::Mongoid.models, wait: true) ⇒ 객체
생성할 검색 인덱스에 대한 요청을 제출합니다.
-
#remove_indexes(models = ::Mongoid.models) ⇒ Array<Class>
제공된 glob이 주어지면 각 모델에 대한 인덱스를 제거하면 클래스가 포함되지 않습니다.
-
#remove_search_indexes(models = ::Mongoid.models) ⇒ 객체
지정된 모델에서 모든 검색 인덱스를 제거합니다.
-
#remove_undefined_indexes(models = ::Mongoid.models) ⇒ Hash{Class => Array(Hash)}
데이터베이스 에는 존재하지만 모델에는 지정되지 않은 인덱스를 제거합니다.
-
#shard_collections(models = ::Mongoid.models) ⇒ Array<Class>
샤드 키를 선언하는 모델을 위한 샤드 컬렉션입니다.
-
#undefined_indexes(models = ::Mongoid.models) ⇒ Array<Hash>
데이터베이스 에는 존재하지만 모델에 지정되지 않은 모델별 인덱스 목록을 반환합니다.
인스턴스 메서드 세부 정보
#create_collections(models = ::Mongoid.models, force: false) ⇒ 객체
제공된 glob이 주어지면 각 모델에 대한 컬렉션을 생성하면 클래스가 포함되지 않습니다.
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 21 def create_collections(모델 = ::몽고이드.모델, force: 거짓) 모델.각 do |모델| 만약 !모델. || 모델.주기적? 모델.create_collection(force: force) 로거.정보("MONGOID :#{모델}에 대한 컬렉션 생성:") other 로거.정보("MONGOID: collection options 무시된 on: #{모델}, 루트 모델에서 정의하세요.") end 구출 예외 로거.오류 "#{ 모델}컬렉션 을 만드는 동안 오류가발생했습니다 ." 올리다 end end |
#create_indexes(models = ::Mongoid.models) ⇒ Array<Class>
제공된 glob이 주어지면 각 모델에 대한 인덱스를 생성하며 클래스는 포함되지 않습니다.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 42 def create_indexes(모델 = ::몽고이드.모델) 모델.각 do |모델| 다음 만약 모델.index_specations.비어 있나요? 만약 !모델. || 모델.주기적? 모델.create_indexes 로거.정보("MONGOID:#{모델}에 인덱스 생성:") 모델.index_specations.각 do |사양| 로거.정보("MONGOID: 인덱스: #{사양.키}, 옵션: #{사양.}") end 모델 other 로거.정보("MONGOID: 인덱스 무시됨: #{모델}, 루트 모델에서 정의하세요.") nil end end.컴팩트 end |
#create_search_indexes(models = ::Mongoid.models, wait: true) ⇒ 객체
생성할 검색 인덱스에 대한 요청을 제출합니다. 이 작업은 비동기적으로 수행됩니다. "대기"가 참이면 인덱스가 생성될 때까지 기다리는 동안 메서드가 차단 됩니다.
67 68 69 70 71 72 73 74 75 76 77 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 67 def create_search_indexes(모델 = ::몽고이드.모델, wait: true) searchable = 모델.SELECT { |m| m.search_index_specs.어떤? } # 검색 인덱스 생성 요청을 대기열에 추가합니다. index_names_by_model = searchable.each_with_object({}) do |모델, obj| 로거.정보("MONGOID :#{모델}에 검색 인덱스 생성중 ...") obj[모델] = 모델.create_search_indexes end wait_for_search_indexes(index_names_by_model) 만약 wait end |
#remove_indexes(models = ::Mongoid.models) ⇒ Array<Class>
제공된 glob이 주어지면 각 모델에 대한 인덱스를 제거하면 클래스가 포함되지 않습니다.
139 140 141 142 143 144 145 146 147 148 149 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 139 def remove_indexes(모델 = ::몽고이드.모델) 모델.각 do |모델| 다음 만약 모델. 시작 모델.remove_indexes 구출 mongo::오류::OperationFailure 다음 end 모델 end.컴팩트 end |
#remove_search_indexes(models = ::Mongoid.models) ⇒ 객체
지정된 모델에서 모든 검색 인덱스를 제거합니다.
155 156 157 158 159 160 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 155 def remove_search_indexes(모델 = ::몽고이드.모델) 모델.각 do |모델| 다음 만약 모델. 모델.remove_search_indexes end end |
#remove_undefined_indexes(models = ::Mongoid.models) ⇒ Hash{Class => Array(Hash)}
데이터베이스 에는 존재하지만 모델에는 지정되지 않은 인덱스를 제거합니다.
118 119 120 121 122 123 124 125 126 127 128 129 130 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 118 def remove_undefined_indexes(모델 = ::몽고이드.모델) undefined_indexes(모델).각 do |모델, 인덱스| 인덱스.각 do |index| 키 = index['key'].symbolize_keys 컬렉션 = 모델.컬렉션 컬렉션.인덱스(세션: 모델.send(:_session)).drop_one(키) 로거.정보( "MONGOID: collection에서 '#{index['name']}'인덱스 제거" + "'#{컬렉션.name}'이(가) 데이터베이스 '#{컬렉션.데이터베이스.name}'에 있습니다." ) end end end |
#shard_collections(models = ::Mongoid.models) ⇒ Array<Class>
샤드 키를 선언하는 모델을 위한 샤드 컬렉션입니다.
이 메서드가 호출되기 전에 컬렉션이 이미 샤딩된 된 모델 클래스를 포함하여 컬렉션이 샤딩된 된 모델 클래스를 반환합니다.
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 172 def shard_collections(모델 = ::몽고이드.모델) 모델.map do |모델| 다음 만약 모델.shard_config.nil? 만약 모델. && !모델.주기적? 로거.경고("MONGOID: #{모델} 에 샤드 구성이 있지만 포함되어 있습니다. ") 다음 end 하지 않는 한 모델.컬렉션.cluster.? 로거.경고("MONGOID: #{모델} 에 샤드 구성이 있지만 샤드 샤딩된 클러스터 에 유지되지 않습니다: #{모델.컬렉션.클러스터.요약}") 다음 end # collStats를 실행하려면 컬렉션의 데이터베이스가 존재해야 합니다. # 서버 버전에 따라 컬렉션 자체도 # 존재합니다. # MongoDB에는 데이터베이스를 생성하는 명령이 없습니다. 최고 # 근사치는 우리가 원하는 컬렉션 을 생성하는 것입니다. # 이전 서버에서는 이미 존재하는 컬렉션을 생성하는 것이 # 오류가 발생했습니다. # 또한 3.6 및 잠재적으로 오래된 서버는 다음을 제공하지 않습니다. # 존재하지 않는 데이터를 collStats하라는 메시지가 표시될 때의 오류 코드 컬렉션 (https://jira.mongodb.org/browse/SERVER-50070). 시작 stats = 모델.컬렉션.database.명령(collStats: 모델.컬렉션.이름).first 구출 mongo::오류::OperationFailure => exc # 코드 26 은(는) 데이터베이스 가 존재하지 않습니다. # 코드 8 은(는) 4.0 기준으로 컬렉션이 존재하지 않습니다. # 3.6 이전 버전에서는 예외 메시지의 텍스트가 일치합니다. 만약 exc.코드 == 26 || exc.코드 == 8 || exc.코드.nil? && exc. =~ /찾을 수 없음/ then 모델.컬렉션.create stats = 모델.컬렉션.database.명령(collStats: 모델.컬렉션.이름).first other 올리다 end end stats = 모델.컬렉션.database.명령(collStats: 모델.컬렉션.이름).first 만약 stats[:sharded] 로거.정보("MONGOID: #{모델.컬렉션.네임스페이스} 가 샤딩된 #{모델}에 대해 샤딩되었습니다.) 다음 모델 end admin_db = 모델.컬렉션.고객.메서드를(: admin).database 시작 admin_db.명령(enableSharding: 모델.컬렉션.database.이름) 구출 mongo::오류::OperationFailure => exc # 샤딩이 이미 활성화된 경우 MongoDB Server 2.6 이(가) 실패합니다. 만약 exc.코드 == 23 || exc.코드.nil? && exc. =~ /이미 활성화되어 있음/ # 없음 other 올리다 end end 시작 admin_db.명령(shardCollection: 모델.컬렉션.namespace, **모델.shard_config) 구출 mongo::오류::OperationFailure => e 로거.오류(" 컬렉션 : #{ 모델}에대한 컬렉션#{모델.컬렉션.네임스페이스}를 샤딩 하지 못했습니다.) 다음 end 로거.정보("MONGOID: 샤드 컬렉션 #{모델.컬렉션.네임스페이스} for #{모델}") 모델 end.컴팩트 end |
#undefined_indexes(models = ::Mongoid.models) ⇒ Array<Hash>
데이터베이스 에는 존재하지만 모델에 지정되지 않은 모델별 인덱스 목록을 반환합니다.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# 파일 'lib/mongoid/tasks/ 데이터베이스.rb', 줄 86 def undefined_indexes(모델 = ::몽고이드.모델) undefined_by_model = {} 모델.각 do |모델| 하지 않는 한 모델. 시작 모델.컬렉션.인덱스(세션: 모델.send(:_session)).각 do |index| # ignore default index 하지 않는 한 index['name'] == '_id_' 키 = index['key'].symbolize_keys 사양 = 모델.index_specation(키, index['name']) 하지 않는 한 사양 # 인덱스가 지정되지 않았습니다. undefined_by_model[모델] ||= [] undefined_by_model[모델] << index end end end 구출 mongo::오류::OperationFailure; end end end undefined_by_model end |