問題タブ [database-concurrency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - postgresqlにgitブランチのようなデータ構造を保存するには?
複数の人がコンテンツを編集できるウィキペディアのようなものを構築しようとしています。特権を持つ人は変更を元に戻すこともできます。私は元に戻すことが損失を伴うことを望んでいません(つまり、人々が行った編集を実際に削除することを意味します。それを非表示にするだけです)、これにはデータ構造のようなgitブランチが「現在」を指すポインターで編集を保存する必要があるようです。
私はこのデザインを試しました:
relationship
新しい記事か既存の記事の編集かを記録する場所:
ここでは、作者 2 が記事/a1
を foo から bar に変更し、記事/a2
が新しい記事になったことを意味します。
current_article
どの記事が「現在の」記事であるかを記録します。通常は最新の記事を指すだけです。復帰後、古いものを指すことができます。
編集が入ってきたら、次のように挿入します。
そして、挿入前トリガーを使用してそのパスの現在の記事を見つけて関係を埋め、挿入後トリガーを使用して現在の記事ポインターを更新します。
このデザインどう思いますか?この設計で私が抱えている問題は、並行処理の難しさです。
挿入前トリガーでは、現在の記事が見つかるまでに既に変更されている可能性があり、挿入後トリガーでは、現在の記事が別の記事を指している状態で誤って上書きされる可能性があります。
これに関して、3 つの質問があります。
- シリアライズ可能な分離は問題を解決しますか? (私はMVCCの概念にかなり慣れていませんが、まだ頭を包み込もうとしています)そうでない場合、どうすれば解決できますか?
- 並行性を処理する必要のない、より優れた設計はありますか?
- 並行性に対処する必要がある場合、さまざまな競合状態で設計を単体テストするにはどうすればよいですか (または、そのような単体テストが必要でしょうか)。
ありがとうございました。