Каков наилучший подход к объединению списка действительно больших списков в NodeJ? - PullRequest
0 голосов
/ 27 апреля 2018

Я создаю приложение для сканирования API в NodeJS, которое выполняет параллельные вызовы для нескольких остальных API одновременно. Каждый из этих остальных вызовов API возвращает отсортированный список объектов. Эти списки могут быть огромными. Теперь я должен объединить их, чтобы составить большой отсортированный список, и вернуть его как мой ответ.

После завершения каждого вызова API я сохраняю результат в redis, а когда все сделано, я объединяюсь с использованием алгоритма сортировки кучи. Это лучший способ с точки зрения эффективности пространства и времени?

Еще один способ, которым я мог бы сделать это, - просто выполнить алгоритм слияния из сортировки слиянием. Какой подход лучше?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Метод слияния отсортированных массивов (O (n1 + n2) Time и O (n1 + n2) Extra Space)

Идея состоит в том, чтобы использовать функцию слияния сортировки слиянием.

  • Создать массив arr3 [] размером n1 + n2.
  • Одновременно проходите arr1 [] и arr2 [].
  • Выберите меньшее из текущих элементов в arr1 [] и arr2 [], скопируйте это меньший элемент на следующую позицию в arr3 [] и двигаться вперед в arr3 [] и массив, элемент которого выбран.
  • Если в arr1 [] или arr2 [] есть оставшиеся элементы, скопируйте их также в arr3 [].
0 голосов
/ 27 апреля 2018

Я вижу, вы можете использовать Promise Object ..

var promiseApi1 = new Promise(function(resolve,reject){
  // call api1 and resolve result ..
  resolve(result);
});

var promiseApi2 = new Promise(function(resolve,reject){
  // call api2 and resolve result ..
  resolve(result);
});

Promise.all([promiseApi1,promiseApi2]).then(values=>{
    // values is array of all results will back from all apis
    // merge values here ..
});
...