Aerospike データベースによると、
[...] 3 つの主な目的で設計されています:
今日の Web スケール アプリケーションのニーズを満たす柔軟でスケーラブルなプラットフォームを作成する
従来のデータベースに期待される堅牢性と信頼性 (つまり、ACID) を提供すること。
運用効率を提供するため (最小限の手動関与)
そして他の場所で:
Aerospike は、最新のストレージおよびデータベース テクノロジと連携して、強力な一貫性 (ACID) を保証しながら、可能な限り多くのトランザクション スループットを絞り込むように最適化されています。
まず、Aerospike でトランザクションの定義が見つかりませんでした。通常、データベースに対する一連の操作として取得します。ただし、後で読むと、トランザクションが ACID であることがわかりません。
詳細なAerospike ACIDの説明を読むと、ACID 保証のふりをしているだけであることがわかりました。
例:
- トランザクションで一連の操作 (a、b、c) を作成したいと考えています。各操作は独立した DB クエリです。c が失敗した場合、DB システムによって a と b がロールバックされます。この機能は Aerospike にはありませんでした。
ドキュメント A と B を変更する 2 つの同時トランザクションを考えてみましょう。最初は A=0 と B=0 です。
- T1 は と に 1 を加算し
A
ますB
- T2 は A と B を 2 で乗算します。
常に最終
A==B
的には - 結果は次のいずれかになります。A=1 & B=1
T2 が最初にドキュメント A と B をロック/所有権を取得するときA=2 & B=2
T2 が最初にドキュメント A と B をロック/所有権を取得するとき
この結果の保証は何ですか?
- T1 は と に 1 を加算し
1.私の例の結果を確認できますか?
2.ユーザー定義関数はここで何らかの形で役立ちますか?
PS
はっきりさせておきますが、エアロスパイクが悪いとは言いたくありません。そこに素晴らしい作品が見えます。ACID保証がそこで失敗したときの明確な説明が欠けています。