Tkr 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

|id|update|
|:-|:-|
|3|3|
|2|2|
|1|1|

4(result)

|id|update|
|:-|:-|
|3|3|
|2|2|

5

|id|update|
|:-|:-|
|1|4|
|3|3|
|2|2|

6(result)

(なし)

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

|id|update|
|:-|:-|
|1|1|

どうする

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

5

|id|update|
|:-|:-|
|1|4|
|3|3|
|2|2|
|1|1|