2012-08-28 4 views
1

mongodb와 ruby ​​(mongoid)를 사용하여 FIFO 큐를 생성 할 수 있는지 궁금합니다.Ruby를 사용하는 MongoDB FIFO 큐

캡 된 컬렉션을 사용하려고하지만 대기열을 어떻게 열 수 있는지 확인할 수 없습니다. 이렇게하려면 collection에 방법이없는 것 같습니다.

내가 지금 뭐하는 거지 것은 : 나에게 내가 궁금해하는 것은

> db.test001_high.find() 
{ "_id" : ObjectId("503c4714236f440e9c000001"), "url" : "http://www.example.com/unique001" } 
{ "_id" : ObjectId("503c4714236f440e9c000002"), "url" : "http://www.example.com/unique002" } 
{ "_id" : ObjectId("503c4714236f440e9c000003"), "url" : "http://www.example.com/unique003" } 

(콘솔)처럼 보이는 덮인 모음을 제공

$fifo = Mongo::Connection.new.db("fifo") 

queue = "#{queue_name}_#{queue_type}" 
unless $fifo[queue].find.present? 
    $fifo.command(create: queue, capped: true, size: 10000000, max: 1000) 
end 
$fifo[queue].insert(url: "http://www.example.com/unique001") 
$fifo[queue].insert(url: "http://www.example.com/unique002") 
$fifo[queue].insert(url: "http://www.example.com/unique003") 

, 루비의 방법이 이 컬렉션에 차단 팝업을 사용 하시겠습니까? 나는 몽고 브 (mongodb)에 익숙하지 않다는 것과, 내가 홍채에있는 것처럼 큐 오브 큐를 만들려고하고 있다고 말해야 만합니다. 어쩌면 나는이 문제를 잘못된 방향으로 접근하고있을 것입니다.

+0

커서를 사용할 수 없습니까? –

답변

2

Java에서 mongo 용 FIFO 큐를 구현했습니다. 원자 작업 findAndModify을 사용하여 큐 모음에서 가장 오래된 항목을 찾고 문서를 제거하거나 (remove = true) 또는 상태 필드를 설정해야합니다.

다른주의 사항은 MasterOnly 읽기에서만이 작업을 수행하거나 쓰기 횟수를 쓰기 노드 수와 같게 설정해야한다는 것입니다. 그렇지 않으면 복제 지연으로 인해 일관성없는 결과가 발생할 수 있습니다.

관련 문제