eu tenho um banco de dados científico com atualmente 4.300.000 registros. É um banco de dados científico e uma API está alimentando-o. Em junho de 2020, provavelmente terei cerca de 100.000.000 de registros.

este é o layout da saída da tabela’:

ID | sensor_ID | speed | velocity | direction-----------------------------------------------------1 | 1 | 10 | 1 | up2 | 2 | 12 | 2 | up3 | 2 | 11.5 | 1.5 | down4 | 1 | 9.5 | 0.8 | down5 | 3 | 11 | 0.75 | up...

BTW, estes são dados fictícios. Mas a saída é uma tabela com 5 colunas: ID, sensor_ID, velocidade, velocidade e direção.

o que eu quero alcançar é um método decente de paginação e filtro. Quero criar um site (no nodejs) onde este +4.000.000 registros (por enquanto) serão exibidos, 10.000 registros por página. Eu também quero ser capaz de filtrar sensor_ID, velocidade, velocidade ou direção.

por enquanto, tenho essa consulta para selecionar linhas específicas:

SELECT * FROM output ORDER BY ID DESC OFFSET 0 LIMIT 10000 // first 10,000 rowsSELECT * FROM output ORDER BY ID DESC OFFSET 10000 LIMIT 10000 // next 10,000 rows...

estou procurando algumas informações / dicas sobre como criar um método de paginação decente. Por enquanto, ainda está quieto rápido do jeito que eu faço, mas acho que será muito mais lento quando atingirmos +50.000.000 de registros.

em primeiro lugar, encontrei esta página: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Estou interessado na paginação do keyset. Mas, para ser honesto, Não tenho ideia de como começar.

o que eu acho que devo fazer:

crie um índice no campo ID:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

eu também encontrei esta página: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Ao rolar para baixo até “melhoria #2: O Método de busca”, você pode ver que eles descartaram a cláusula OFFSET e estão usando uma cláusula WHERE. Também vejo que eles estão usando o último ID de inserção em sua consulta:

SELECT * FROM output WHERE ID < <last_insert_id_here> ORDER BY ID DESC LIMIT 10000

eu não entendo completamente isso. Para a primeira página, preciso do último ID de inserção. Então eu busco os 10.000 registros mais recentes. Mas depois disso, para obter a segunda página, não preciso do último ID de inserção, preciso do 10.000º último ID de inserção (eu acho).

alguém pode me dar uma boa explicação sobre paginação e filtragem de maneira rápida.

as coisas que estou usando: – postgresql – pgadmin (para gerenciamento de banco de dados) – node.js (versão mais recente)

obrigado a todos! E tenha um bom 2020!

Editar 1: Não tenho ideia, mas massiveJS (https://massivejs.org/) poderia ser algo bom de usar? E devo usá-lo em todas as consultas ou apenas nas consultas de paginação?

Editar 2: Acho que descobri um pouco (corrija-me se estiver errado).

Vamos dizer que eu tenho de 100.000 registros:

1) Obtenha a última inserido ID

2) Usar esta última inserida ID para buscar os últimos 10.000 registros

SELECT * FROM output WHERE ID < 100000 ORDER BY ID DESC LIMIT 10000 // last insert ID is here 100,000 because I have 100,000 records

3) Mostrar a 10.000 registros, mas também para salvar a inserir o ID de 10.000 registro para usar na próxima consulta

4) Obter o próximo 10.000 registros com os novos última inserir id

SELECT * FROM output WHERE ID < 90000 ORDER BY ID DESC LIMIT 10000 // 90,000 is the very last insert id - 10,000

Deixe uma resposta

O seu endereço de email não será publicado.