Giter Club home page Giter Club logo

ts_map_vs_array's Introduction

Map.get vs Array.find - Qual é a melhor opção para volume massivo de dados?

Certo dia, em um projeto typescript, me deparei com a necessidade de lidar com um volume considerável de dados, ultrapassando os 2GB. Inicialmente, sem preocupações com desempenho, segui o fluxo convencional: carreguei os dados na memória, utilizei filtros, funções find, entre outros. No entanto, ao tentar executar o programa, minha máquina praticamente implorou misericórdia e a execução não rolou (a aplicação era uma lambda e antes que terminasse a execução, deu timeout).

Dado essa introdução, vou demonstrar a diferença de desempenho entre as estruturas de dados Map e Array ao lidar com volumes massivos de informações.

Cenário:

Vamos supor que temos duas tabelas, "Pessoas" e "Contas", e precisamos filtrar essas tabelas para obter apenas as "Contas" ativas, retornando um objeto com os dados da "Pessoa" associados aos dados da "Conta". Cada uma das tabelas possui 2.5 milhões de registros, sendo que só 49.986 dessas contas estão ativas.

Desempenho

Utilizando Array:

persons
    .filter((person) => accounts.find((account) => account.personId === person.id).isAccountActive)
    .map((person) => ({
        ...person,
        account: accounts.find((account) => account.personId === person.id)
    }))

// Tempo de execução deste trecho:
// Array.find: 4 minutos e 41 segundos

Utilizando Map:

const accountsMap = new Map<string, Account>()
accounts.forEach((account) => {
    accountsMap.set(account.personId, account)
});

persons
    .filter((person) => accountsMap.get(person.id)?.isAccountActive)
    .map((person) => ({
        ...person,
        account: accountsMap.get(person.id)
    }))

// Tempo de execução deste trecho:
// Map.get: 168 milissegundos

Observe que, ao criar o Map, foi necessário percorrer todos os dados de "Contas" para criar a nova estrutura, no entanto, o desempenho resultante foi absurdamente superior. Neste cenário, fica evidente que o Map oferece um desempenho muito superior em relação ao Array.

Conclusão, ao lidar com grandes volumes de dados usando javascript, considerar a estrutura de Map pode ser uma escolha inteligente para otimizar o desempenho de suas operações, como exemplificado neste post.

Você encontra o código completo nesse repositório: https://github.com/delucagabriel/ts_map_vs_array

ts_map_vs_array's People

Contributors

delucagabriel avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.