현재 4,300,000 개의 레코드가있는 과학 데이터베이스가 있습니다. 그것은 과학적 데이터베이스이며,그것을 먹이고 있습니다. 2020 년 6 월,나는 아마 약 100,000,000 개의 레코드를 가질 것입니다.

이 테이블’출력의 드 레이아웃입니다’:

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...

이것은 더미 데이터입니다. 그러나 출력은 5 개의 열이있는 테이블입니다.

내가 달성하고자하는 것은 적절한 페이지 매김 및 필터 방법입니다. 이+4,000,000 개의 레코드(현재)가 페이지 당 10,000 개의 레코드가 표시되는 웹 사이트(노드)를 만들고 싶습니다. 또한 센서,속도,속도 또는 방향을 필터링 할 수 있기를 원합니다.

지금은 특정 행을 선택하는 쿼리가 있습니다:

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...

괜찮은 페이지 매김 방법을 만드는 방법에 대한 몇 가지 정보/팁을 찾고 있습니다. 지금은,그것은 여전히 조용한 빠른 내가 그것을 할 방법,하지만 난 우리가+50,000,000 기록을 명중 할 때 훨씬 느려질 것이라고 생각합니다.

우선,이 페이지를 찾았습니다:https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. 키 세트 페이지 매김에 관심이 있습니다. 그러나 솔직히 말해서,나는 시작하는 방법을 단서가 없다.

내가해야 할 것:

아이디 필드에 인덱스 만들기:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

나는 또한이 페이지를 발견했다:https://leopard.in.ua/2014/10/11/postgresql-paginattion. 당신은 아래로 스크롤 할 때”개선#2:탐색 방법”,당신은 그들이 오프셋 절을 떨어 것을 볼 수 있습니다,및 위치 절을 사용하는. 나는 또한 그들이 그들의 쿼리에서 마지막 삽입 아이디를 사용하고 있음을 알 수있다:

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

나는 이것을 완전히 이해하지 못한다. 첫 번째 페이지,나는 아주 마지막 삽입 신분증이 필요합니다. 그런 다음 10,000 개의 최신 레코드를 가져옵니다. 그러나 그 후 두 번째 페이지를 얻으려면 마지막 삽입 아이디가 필요하지 않으며 10,000 번째 마지막 삽입 아이디가 필요합니다(추측).

누군가가 빠른 방법으로 페이지 매김 및 필터링에 대한 좋은 설명을 줄 수 있습니까?내가 사용하고있는 것들은 다음과 같습니다.(최신 버전)

모두 감사합니다! 그리고 좋은 2020 을 보내십시오!

편집 1:나는 단서가 없지만 대산(https://massivejs.org/)이 좋은 것이 될 수 있을까? 그리고 모든 쿼리에 사용하거나 페이지 매김 쿼리에만 사용해야합니까?

편집 2: 나는 그것이 조금 알아 낸 것 같아요(내가 틀렸다면 나를 수정하십시오).

100,000 개의 레코드가 있다고 가정 해 봅시다:

1)마지막으로 삽입 된 아이디 가져 오기

2)마지막 삽입 된 아이디를 사용하여 마지막 10,000 개의 레코드를 가져옵니다.

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) 4)새 마지막 삽입 아이디

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

로 다음 10,000 개의 레코드를 가져옵니다

답글 남기기

이메일 주소는 공개되지 않습니다.