MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Najlepszy sposób na odpytywanie wszystkich dokumentów z kolekcji mongodb w sposób reaktywny bez zalewania pamięci RAM

Nie jestem ekspertem od mongodb, ale na podstawie przykładów, które widziałem, spróbowałbym tego wzorca.

Pominąłem zdarzenia inne niż dane, ponieważ dławienie tego wydaje się być głównym problemem.

var cursor = db.collection('mycollection').find({});  

const cursorNext = new Rx.BehaviourSubject('next');  // signal first batch then wait
const nextBatch = () => {
  if(cursor.hasNext()) {
    cursorNext.next('next');
  }
});

cursorNext
  .switchMap(() =>                            // wait for cursorNext to signal
     Rx.Observable.fromPromise(cursor.next())  // get a single doc
       .repeat()                               // get another
       .takeWhile(() => cursor.hasNext() )     // stop taking if out of data
       .take(batchSize)                        // until full batch
       .toArray()                              // combine into a single emit
  )
  .map(docsBatch => {
    // do something with the batch
    // return docsBatch or modified doscBatch
  })
  ... // other operators?
  .subscribe(x => {
    ...
    nextBatch();
  });         

Próbuję przeprowadzić test tego przepływu Rx bez mongodb, w międzyczasie może to dać ci kilka pomysłów.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie o zakres dla paginacji MongoDB

  2. Wstaw dokument i/lub dodaj poddokument

  3. Monitorowanie wydajności i kondycji ClusterControl

  4. Używanie S3 jako bazy danych a baza danych (np. MongoDB)

  5. Jak połączyć się z inną bazą danych MongoDB jako superużytkownik za pomocą NodeJS?