CoreDataとACID

50 %
50 %
Information about CoreDataとACID
Technology

Published on February 15, 2014

Author: motooka

Source: slideshare.net

Description

Cocoa勉強会関西 2014.02.15(土) 発表資料

RDBMSのACID特性という観点でCoreDataを見る。
デモ用アプリのソースコードはこちら
https://github.com/motooka/CocoaTests/tree/master/20140215_AtomicityDemo01/AtomicityDemo01

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 



Add a comment

Related presentations

Related pages

Cocoa勉強会関西#54でCoreDataについて話して ...

CoreDataとACID from Tadahisa Motooka.
Read more

iOS(iPhone/iPad) カテゴリーの記事一覧 - 職業 ...

... ! Atomicity(原子性)を気にしよう! データのバックアップは超重要 どんな話? CoreDataとACID f ...
Read more