SlideShare a Scribd company logo
1 of 36
Download to read offline
CoreData と ACID
RDBエンジニア的 CoreDataとの付き合い方
Cocoa勉強会関西 2014.02.15(Sat)
T. Motooka
誰?
• 本岡 忠久 @t_motooka / id:t_motooka 
• Webアプリ屋さん(PHP / Java / 他)
• 0x20歳
• 帰国子女(?!)
• 住所不定・無職 → 大型新人(物理)
お題
• ACIDとは?
• “A” “C” “I” “D” 各要素の概要
• ACID と CoreData
• “A” についてkwsk
• “I” について少しだけ
ACIDとは?
• RDBMSのトランザクション処理が
備えるべき性質・機能 by Jim Gray

• プログラムとデータベースの役割分担
• データが正しく処理されるためのもの
• 性能とトレードオフ
• 頭字語
ACIDとは?
• A :Atomicity(原子性)
• C:Consistency(整合性)
• I :Isolation(排他制御)
• D:Durability(永続性)
お題
• ACIDとは?
• “A” “C” “I” “D” 各要素の概要
• ACID と CoreData
• “A” についてkwsk
• “I” について少しだけ
Atomicity(原子性)
• a.k.a. 不可分性
• a.k.a. All or Nothing 
• Obj-C の atomic / nonatomic に似てる
• 操作は全て成功する or 全て失敗する
• 銀行口座の振り込み操作の例(後で)
Consistency(整合性)
• a.k.a. 一貫性
• 格納されているデータは、制約を満た
していることが保証されている

• 制約とは
✓負の数値は格納されない
✓n文字以上の文字列限定 など
Isolation(排他制御)
• a.k.a. 独立性
•

@synchronized(obj) {...} みたいな

• 「スレッドセーフ」に近い
(排他制御の範囲がもう少し広い)

• 性能とのトレードオフ度:高い
Durability(永続性)
• commitされたデータは永続
• プログラム側は永続性を気にしない
• 気にするだけ無駄
• 気にすることができない
• →永続化ストア(Persistent Store)
お題
• ACIDとは?
• “A” “C” “I” “D” 各要素の概要
• ACID と CoreData
• “A” についてkwsk
• “I” について少しだけ
ACIDとCoreData
通常のRDBMS
A : 原子性

CoreData(SQLite)

○

?
今回の主題

C : 整合性
I : 排他
D : 永続性

○
check制約など

△
Validation組み込める

設定いろいろ

?

○

○

また近いうち
お題
• ACIDとは?
• “A” “C” “I” “D” 各要素の概要
• ACID と CoreData
• “A” についてkwsk
• “I” について少しだけ
Atomicity(原子性)
銀行口座の振込操作の例 (正常時)

• AさんはBさんの口座に500円振込したい
• Aさんの口座から500円引く
• Bさんの口座に500円足す
• (・∀・)イイ!!
Atomicity(原子性)
銀行口座の振込操作の例 (異常時)

• AさんはBさんの口座に500円振込したい
• Aさんの口座から500円引く
_人人人人人人人人人_
>  突然の 落ち  <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
Bさんの口座には振り込まれない

•
• 消えた500円はどこに…?
Atomicity(原子性)
銀行口座の振込操作の例 (原子性あり)

• AさんはBさんの口座に500円振込したい
• Aさんの口座から500円引く
_人人人人人人人人人_
>  突然の 落ち  <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
復活後、Aさんの口座は元通り

•
• 500円は消えない!
Atomicity(原子性)

じゃあCoreDataは?
Atomicity(原子性)

デモ
「H」or ⌘+Tab 
Atomicityが有るとき
• contextのsaveまでは データは揮発性
• saveすると不揮発性が
• saveまでにクラッシュすると戻る
 → Atomicである!

• じゃあsaveは本当の最後に1回だけ
やれば良いじゃん
Atomicityが有るとき
• saveは最後の最後に1回だけでOK?
• 途中でクラッシュしたら全部元に戻る
けど、本当にええのん?

• 長過ぎるトランザクションは
パフォーマンス問題と仲良し♡

➡どこからどこまでをatomicにするのか
しっかり検討を
Atomicityが有るとき
Atomicityを実現するための内部の仕組み

• メインのデータファイル+WAL
(Write Ahead Logging : ログ先行書き込み)
データ変更点がWALに「追記」されていく

• チェックポイント処理
WAL内容をデータファイルに反映

• 自力で実装するのは相当面倒
Atomicityが無いとき
• ストアが1つのときは大丈夫
• データ容量、歴史的経緯、etc...
諸事情でストアが2つのときは??
http://stackoverflow.com/q/994607/518639

• CoreData以外の操作と合わせて原子性
を持たせるには?

• そんなん無茶やん
Atomicityが無いとき

じゃあどうすんの?
Atomicityが無いとき
• 「保証」は無理だけど最大限頑張ろう
• 途中でクラッシュする可能性を減らす
• 万が一のことを想定
• ユーザの利益になるデータ不整合
RDBMSでの実装例
• 2相コミット(Two Phase Commit)
• データストアが複数存在する場合の話
• 各ストアに「コミットして良い?」と
いて回る

• 超複雑だけど、これで保証が生まれる
• デメリット多し
お題
• ACIDとは?
• “A” “C” “I” “D” 各要素の概要
• ACID と CoreData
• “A” についてkwsk
• “I” について少しだけ
ここで言う排他制御とは
• スレッドセーフの話ではありません
• データをどう正確に読ませるか、の話
ここで言う排他制御とは
• Aさんがデータ更新(commitしてない)
• Bさんがデータを読みにきた
• Aさんがrollbackした
Bさんは、どのデータを見た??
Isolationのキーワード
• Dirty Read
• Non-Repeatable Read
• Phantom Read
まとめ
• Atomicity どこからどこまで?
• Isolationの話、お楽しみに
• CoreDataのベースには
RDBMSで長年研究されてきた内容

➡このスライド内のRDBMS用語は
きっと役に立つ、はず
Q&A など
少しだけPR
突然の死
• AAを作る iOS App
• カンタン操作
• Tweetもできる
• iAdが出る
• 履歴も保存できている(CoreData)
突然の死

デモ
「H」or ⌘+Tab 
完

More Related Content

Similar to CoreDataとACID

Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Yoshiyuki Nakamura
 
IDCFクラウドセミナー RDB活用
IDCFクラウドセミナー RDB活用IDCFクラウドセミナー RDB活用
IDCFクラウドセミナー RDB活用IDC Frontier
 
【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -
【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -
【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -日本マイクロソフト株式会社
 
2023年はTiDBの時代!
2023年はTiDBの時代!2023年はTiDBの時代!
2023年はTiDBの時代!Tomotaka6
 
Core Data バッドプラクティス
Core Data バッドプラクティスCore Data バッドプラクティス
Core Data バッドプラクティスKaname Noto
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
API活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムAPI活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムCData Software Japan
 
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編tzm_freedom
 

Similar to CoreDataとACID (8)

Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
 
IDCFクラウドセミナー RDB活用
IDCFクラウドセミナー RDB活用IDCFクラウドセミナー RDB活用
IDCFクラウドセミナー RDB活用
 
【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -
【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -
【de:code 2020】 PostgreSQL もスケールさせよう! - Hyperscale (Citus) -
 
2023年はTiDBの時代!
2023年はTiDBの時代!2023年はTiDBの時代!
2023年はTiDBの時代!
 
Core Data バッドプラクティス
Core Data バッドプラクティスCore Data バッドプラクティス
Core Data バッドプラクティス
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
API活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムAPI活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステム
 
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

CoreDataとACID