データベース システムにおいて、アトミック性( / ˌ æ t ə ˈ m ɪ s ə ti / ;古代ギリシア語: ἄτομος 、ローマ字表記: átomos、文字通り「分割不可能」 ) は、分割不可能かつ還元不可能な一連のデータベース操作から構成されるデータベース トランザクションの特性であり、すべての操作が実行されるか、まったく実行されないかのどちらかです。[ 1 ]これは、ACIDトランザクション特性 (アトミック性、一貫性、分離性、永続性) の 1 つです。アトミック性が保証されると、部分的なデータベース更新は、一連の操作全体を完全に拒否するよりも大きな問題を引き起こす可能性があるため、発生しません。結果として、アトミック トランザクションは、他のデータベース クライアントから進行中であると観測することはできません。ある時点ではまだ発生しておらず、次の時点では既に全体が実行されています (または、トランザクションが進行中にキャンセルされた場合は何も発生していません)。
トランザクションの原子性の例としては、銀行口座 A から口座 B へのデジタル送金が挙げられます。これは、口座 A からお金を引き落とし、口座 B に入金するという 2 つの操作から構成されます。これらの操作を両方とも原子トランザクション内で実行することで、データベースが一貫した状態を維持することが保証されます。いずれかの操作が失敗した場合でも、どちらの口座にも説明のつかない入金や引き落としが発生することはありません。[ 2 ]
同じ用語は、データベースシステムの第一正規形の定義でも使用されますが、そこでは、フィールドの値が、複数の名前、数値、日付、その他の型を詰め込んだ文字列のように、分解される複数の小さな値で構成されてはならないという概念を指します。
原子性は、トランザクションの他のACID特性に関して完全に直交する性質を持つわけではありません。例えば、分離性は、デッドロックなどの分離性違反が発生した場合に、それを包含するトランザクションをロールバックするために原子性に依存しています。また、一貫性も、不正なトランザクションによる一貫性違反が発生した場合に、それを包含するトランザクションをロールバックするために原子性に依存しています。
その結果、違反を検出できず、関連するトランザクションをロールバックできない場合、分離性または一貫性の障害が発生する可能性があります。
一般的に、システムは、どのトランザクションが開始され、どのトランザクションが終了したかを示すメカニズムを提供するか、変更が発生する前のデータのコピーを保持することによって(読み取りコピー更新)、アトミック性を実現します。いくつかのファイルシステムは、ジャーナリングを使用してデータの複数のコピーを保持する必要性を回避する方法を開発しました(ジャーナリングファイルシステムを参照)。データベースは通常、変更を追跡するために何らかの形式のログ記録/ジャーナリングを使用してこれを実装します。システムは、変更が正常に行われた後に必要に応じてログ(多くの場合メタデータ)を同期します。その後、クラッシュリカバリは不完全なエントリを無視します。実装は並行性の問題などの要因によって異なりますが、アトミック性、つまり完全な成功または完全な失敗の原則は変わりません。
最終的に、アプリケーションレベルの実装はすべてオペレーティングシステムの機能に依存します。ファイルシステムレベルでは、POSIX準拠システムは、アプリケーションがファイルをアトミックにオープンまたはロックできるようにするシステムコール(など)open(2)を提供しますflock(2)。プロセスレベルでは、POSIXスレッドが適切な同期プリミティブを提供します。
ハードウェアレベルでは、テストアンドセット、フェッチアンドアッド、コンペアアンドスワップ、ロードリンク/ストアコンディショナルなどのアトミック操作とメモリバリアが必要となる。ハイパースレッディングやマルチプロセッシングといった並行実行機能を持たないハードウェアは現在では極めて稀であるため、ポータブルなオペレーティングシステムは、同期を実現するために単純に割り込みをブロックすることはできない。
分散型データベースやシャーディングされたデータベースでは、ネットワーク遅延や部分的な障害の可能性によってアトミック性が複雑化します。従来の分散システムでは、シャーディング間のアトミック性を確保するためにロックプロトコル(2PCなど)がよく使用されますが、これらはパフォーマンスのボトルネックを引き起こす可能性があります。分散型台帳のコンセンサスに関する最近の研究では、「ブレイド同期」などの代替モデルが提案されています。Cerberusなどのプロトコルで使用されているこの手法は、複数のシャーディングのコンセンサスフェーズを絡み合わせることで、すべてのトランザクションのグローバルな順序付けなしにアトミック性を保証します。[ 3 ]
プロセッサが同じバス操作で同時にメモリ位置を読み取り、書き込むことができる操作。これにより、操作が完了するまで、他のプロセッサやI/Oデバイスがメモリに書き込みや読み取りを行うことができなくなります。