2014-01-07 1 views
0

여러 gridfs 같은 폴더를 사용하는 것이 좋습니다. 아이디어는 폴더의 삭제가 쉽다는 것입니다. 파일 시스템을 삭제하면됩니다. 나는 한가지 문제 만있다. 나는 그 (것)들을 삭제하는 어떤 방법을 보지 않습니까? 만약 그것들을 지우면 모든 것을 반복하고 하나씩 지워야한다는 것을 의미합니다. 그러면 이해가되지 않습니다. 그래서 gridfs에 대해 잘 알고있는 누군가가 이것을 할 수 있는지를 확인하고 어리석은 생각입니까? 또한 각 "파일/폴더"의 자체 색인 등을 사용하여 별도의 파일 시스템을 만드는 것이 현명하지 않을 수 있으며 따라서 수천 개의 개별 파일 시스템이 생성 될 수 있습니다 ... (그러나 바보라고하지 마십시오. 아이디어, 그것은 그것이 할 수 있는지 여부, 그리고 그렇다면, 내 특별한 사용 사례에서는 현명하지 않더라도 어떻게해도 유효한 질문입니다.)전체 gridfs를 삭제하는 방법 (Ruby 드라이버 사용)?

다음은 내가 달성하고자하는 것을 보여줍니다. 루비 드라이버 :

file = "some_image.jpg" 
grid = Mongo::Grid.new(Mongoid.database, File.join(cache_dir, File.basename(file)) 
genereate_versions_of(file).each do |version| #e.g. micro.jpg, thumbnail.jpg, large.jpg 
    grid.put version 
end 

#and then later when all of the versions of this file needs to be deleted I'd like 
#to do something like this... but it seems it's not possible? 
Mongo::Grid.destroy(Mongoid.database, File.join(cache_dir, File.basename(file)) 
#or 
grid = Mongo::Grid.new(Mongoid.database, File.join(cache_dir, File.basename(file)) 
grid.destroy 

답변

1

GridFS 정상적인 소장 위에 단지 추상화 계층이며 개의 모음으로 표현된다 : .files 및 .chunks. 이 두 컬렉션을 "GridFS 삭제"로 삭제할 수 있습니다. 는 File.join(cache_dir, File.basename(file))과 같아야합니다.

+0

그래서'db = Mongoid.database; grid_fs_name = File.join (cache_dir, File.basename (file))'그러면 간단히 [[.files ",".chuncks "] .each {| part | db [grid_fs_name + part] .drop}'? 더 구체적으로 나의 유스 케이스에 .. 얼마나 잘 mongodb 작은 컬렉션/인덱스의 큰 금액을 생성하고 파괴 처리합니까? 아이디어는 임시로 그리드에 파일을 저장하고 나중에 백그라운드 작업에서 S3 버킷으로 파일을 이동하므로 사용자가 새 이미지를 얼마나 적극적으로 업로드하는지에 따라 10-100 개의 그리드가 매일 만들어지며 파괴됩니다. 너무 많은 것은 동시에 존재하지 않을 것이다. – Timo

+0

네, 그렇게 할 수 있습니다. 콜렉션을 생성하는 것은 비용이 많이 들지 않으므로 100 개가 넘지 않는 한 정상적으로 작동합니다. – Derick

관련 문제