◆ タイムスタンプは見やすいけど古いのを消すのがめんどう
◆ 連番で小さい数字が新しいにすると最後尾を消して 数字を 1 つ後ろにずらすのがめんどう
◆ 連番で最新の番号を別に保存しておいて保存する場所を回していくと保存・削除が楽

10 世代のデータを保存して 11 代目になると 1 代目は消して 2~11 の 10 件だけ残るようにしたいです
この場合に管理するための名前をどうつけるかが難しいです
名前は ファイルだとファイル名 データベースだとキーになる文字列などに当たります

タイムスタンプ

世代保存でよくあるのがログファイルのローテートです
こういうのだと日付なので ファイル名に日付が使われてるのをよく見ます

タイムスタンプだと いつのものなのかわかりやすいメリットがあります
しかし削除がけっこう手間です
新規作成時に 10 日前のを消せばいいというなら単純ですが あくまで世代なわけで 日が空いてることもあります
起動(保存)しない日もあります
1 年起動してないなら 1 年前のファイルが残ってるわけで 1 日ずつ古い名前を探して見つかったら消すという処理を 何年分もやってられません
そうなると名前指定で消すのではなく 10 日分以外を探して消すことになります
全部の保存された名前から 10 日分の名前でないなら削除になります

これだけでも ちょっと面倒なのに 保存間隔が日付とは限りません
ユーザが保存ボタンを押したタイミングごとかもしれません
そうなると ソートして最新 10 件にする必要が出てきます
それにファイル一覧やキー一覧取得はできればしたくないです
JavaScript の localStorage とかでは 世代保存以外のすべてのデータが対象になって全部取り出すと必要以上に重くなりそうですしもっと楽な方法で済ませたいです

連番

そうなると タイムスタンプのキーはやめて連番が簡単そうです
1~10 の名前にして 最新を 1 で一番古いのが 10 になります
新しく作るときには 10 を消して 1~9 を一つ後ろの名前にリネームして 1 を新しく作ります

新しいのが 1 とわかっているので 最新を見るには困らないですが タイムスタンプがメタデータやデータ内部でしかわからないと不便とも言えます
それに全部を 1 つ後ろにリネームがちょっと嫌です
ものによってはリネームなんて事はできず 新規作成で 10 に 9 の中身を保存という実質コピーすることになってサイズが大きいと時間がかかります

連番+latest

なのでちょっと改良したのが連番に最新版の情報を別にもたせる方法です
1~10 の連番は同じですが 最新が 1 とは限りません 1 から順に 1,2,3,... と進んでいって 10 になると次は 1 に戻ります
2 周目になると どれが最新なのかわからないので保存した 10 件とは別に最新版の番号を保存しておきます

10 件以外に追加情報がいるのがちょっと嫌なところですが 書き込みや削除部分はすごくシンプルに済みます
1 が最新固定の連番と同じくキーだけでいつのものかはわからない不便さもありますが 今回は保存時の処理を簡単なものにしたかったのでこの方法が一番良さそうです

コード的にはこういう感じです
1~10 より 0~9 のほうがプログラム的に扱いやすいので変更してます

function save(data){
const key = (getLatest() + 1) % savenum
write(key, data)
setLatest(key)
}

getLatest()/setLatest() が最新版情報の取得・保存で write がキーに対してデータを保存します
savenum は保存する世代数の数値です

保存されたのを全部取り出してチェックしたり 最後尾を削除して他を一つ後ろにずらしたりがないのですごく簡単です

曜日単位でログを保存するツールはこれに近いものですね
どこに保存すべきかは最新版を保存するのではなく今日の曜日を確認するだけです
毎日起動してないと最新 10 件とは言えないですけど