次のような JSON オブジェクトを処理する共同 Web アプリケーションがあります。
var post = {
id: 123,
title: 'Sterling Archer',
comments: [
{text: 'Comment text', tags: ['tag1', 'tag2', 'tag3']},
{text: 'Comment test', tags: ['tag2', 'tag5']}
]
};
私のアプローチは、JSON ドキュメントにパッチを適用するためのjsonpatchライブラリでrfc6902 (JSONPatch) 仕様を使用することです。このようなドキュメントはすべて MongoDB データベースに保存されます。ご存知のように、最後のドキュメントは頻繁に書き込むと非常に遅くなります。
より高速で高負荷のアプリケーションを取得するために、次のようなパッチ操作のキューとして redis を使用します。
{ "op": "add", "path": "/comments/2", "value": {text: 'Comment test3', tags: ['tag4']}" }
そのようなすべてのパッチ操作をキューに保存し、真夜中に cron スクリプトを実行してすべてのパッチを取得し、完全なドキュメントを作成して MongoDB データベースで更新します。
次のような破損したパッチの場合、どうすればよいかまだわかりません。
{ "op": "add", "path": "/comments/0/tags/5", "value": 'tag4'}
tags
配列の長さが 3 しかないため、上記のパッチは上記のドキュメントには適用されません(公式ドキュメントhttps://www.rfc-editor.org/rfc/rfc6902#page-5によると) 。
The specified index MUST NOT be greater than the number of elements in the array.
そのため、ユーザーがオンラインの場合、パッチ操作が redis キューに保存されるためエラーは発生しませんが、翌日、cron スクリプトに適用されていない壊れたパッチが原因で壊れたドキュメントが表示されます。
私の質問は、redis キューに保存されているすべてのパッチが正しく、プライマリ ドキュメントが破損していないことをどのように保証できるのでしょうか?