私は現在4,300,000の記録を持つ科学的なデータベースを持っています。 それは科学的なデータベースであり、APIがそれを供給しています。 2020年には約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...

ところで、これはダミーデータです。 しかし、出力は、ID、sensor_id、speed、velocity、directionの5列のテーブルです。

私が達成したいのは、まともなページネーションとフィルタメソッドです。 私はこの+4,000,000レコード(今のところ)が表示されるウェブサイト(nodejs内)、ページあたり10,000レコードを作成したいと思います。 また、sensor_id、speed、velocity、またはdirectionをフィルタリングできるようにしたいと考えています。

今のところ、特定の行を選択するためのこのクエリがあります:

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/。 私はkeysetのページネーションに興味があります。 しかし、正直に言うと、私はどのように開始する手掛かりを持っていません。

私がしなければならないと思うこと:

IDフィールドにインデックスを作成します:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

私もこのページを見つけました:https://leopard.in.ua/2014/10/11/postgresql-paginattion。 「改善#2:シークメソッド」までスクロールすると、OFFSET-clauseが削除され、WHERE-clauseが使用されていることがわかります。 また、クエリで最後の挿入IDを使用していることもわかります:

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

私はこれを完全に理解していません。 最初のページでは、最後の挿入IDが必要です。 それから私は10,000の最新のレコードを取得します。 しかし、その後、2番目のページを取得するには、最後の挿入IDは必要なく、最後の挿入IDが10,000番目に必要です(私は推測します)。

誰かが私に高速な方法でページネーションとフィルタリングについての良い説明を与えることができます。私が使用しているもの:-postgresql-pgadmin(データベース管理用)-node。js(最新版)

皆さん、ありがとうございました! そして、素敵な2020年を持っています!編集1:手掛かりはありませんが、massiveJS(https://massivejs.org/)を使用するのに適したものにすることはできますか? そして、私はすべてのクエリで、またはページネーションクエリでのみそれを使用する必要がありますか?

編集2: 私はそれが少し理解されたと思う(私が間違っているなら私を修正する)。

1)最後に挿入されたIDを取得する

2)この最後に挿入されたIDを使用して、最後の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) 10,000レコードを表示しますが、次のクエリで使用する10,000レコードの挿入IDも保存します

4)新しい最後の挿入idを持つ次の10,000レコードを取得します

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

コメントを残す

メールアドレスが公開されることはありません。