Kgtkr's Blog

順序が変化するデータのページング処理について考えてた(個人的メモ)

2018/08/22

今回のデータ

(id,update)

ページング処理は大変

要素が追加されていくだけのデータであればページング処理は簡単です。追加されたdateなどをキーにしてlimitするだけで出来ます。
しかしupdateをキーにしたい時などは上手いことしないと抜けが発生します。
まあやったことある人なら分かると思います。
elasticsearchのscrollAPIとか使えば出来ますが…あれスナップショットの有効期限とか設定する必要があるので好きじゃない。永続的に使いたい

今回やること

  1. add(id=1,update=1)
  2. add(id=2,update=2)
  3. add(id=3,update=3)
  4. get(key=INF,limit=2)
  5. update(id=1,update=4)
  6. get(key=2,limit=2)

単純にやると

1,2,3

idupdate
33
22
11

4(result)

idupdate
33
22

5

idupdate
14
33
22

6(result)

(なし)

本当は以下のデータが欲しい

idupdate
11

どうする

書き換えるのではなく追記方式(不変的な)にすればデータ的には残ってるので正常に取得出来るはず
効率の良いクエリがあるかは知らない(考えます)

5

idupdate
14
33
22
11