Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
Yukiya Nakagawa
24,395 views
僕らのデータ同期プラクティス
2015年4月25日に行われたDroidKaigiでの発表資料です。
Technology
◦
Read more
24
Save
Share
Embed
Save to Drive
Download now
Downloaded 41 times
1
/ 40
2
/ 40
3
/ 40
4
/ 40
5
/ 40
6
/ 40
7
/ 40
8
/ 40
9
/ 40
10
/ 40
11
/ 40
12
/ 40
13
/ 40
14
/ 40
15
/ 40
16
/ 40
17
/ 40
18
/ 40
19
/ 40
20
/ 40
More Related Content
PDF
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
by
Kenichi Takahashi
22 slides
11.3K views
PPTX
アグリノートを支える技術
by
Yukiya Nakagawa
53 slides
9K views
PDF
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
by
Yukiya Nakagawa
16 slides
2.7K views
PDF
用途に合わせたアニメーションの実装方法
by
Takao Sumitomo
50 slides
18.1K views
PDF
最速でリリースするためのAndroidアプリデザイン
by
Naoki Aoyama
27 slides
12.3K views
PDF
Android再入門 〜Eclipseのことは忘れろ〜
by
Yukiya Nakagawa
30 slides
4.5K views
PPTX
Wantedlyのテスト事情
by
Takao Sumitomo
19 slides
2.8K views
PDF
開発を効率的に進めるられるまでの道程
by
Takao Sumitomo
52 slides
27.5K views
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
by
Kenichi Takahashi
22 slides
11.3K views
アグリノートを支える技術
by
Yukiya Nakagawa
53 slides
9K views
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
by
Yukiya Nakagawa
16 slides
2.7K views
用途に合わせたアニメーションの実装方法
by
Takao Sumitomo
50 slides
18.1K views
最速でリリースするためのAndroidアプリデザイン
by
Naoki Aoyama
27 slides
12.3K views
Android再入門 〜Eclipseのことは忘れろ〜
by
Yukiya Nakagawa
30 slides
4.5K views
Wantedlyのテスト事情
by
Takao Sumitomo
19 slides
2.8K views
開発を効率的に進めるられるまでの道程
by
Takao Sumitomo
52 slides
27.5K views
What's hot
PDF
もう一度Kotlinの話をしよう #ndsmeetup4
by
Yukiya Nakagawa
34 slides
1.9K views
PDF
Angularおじさんの1年
by
Hayashi Yuichi
30 slides
5.6K views
PPTX
ゆめみ流 クライアントワークにおけるトライアル&エラー
by
Shusuke Toda
25 slides
1.5K views
PPTX
Azure 三つ巴チームが送るIgnite 振り返り!
by
Yasuaki Matsuda
17 slides
1.5K views
PDF
Angular jsの継続的なバージョンアップ
by
Kazuyoshi Tsuchiya
46 slides
13.5K views
PDF
これからフロントエンジニアを目指すあなたへ
by
Mitsuru Ogawa
20 slides
7.9K views
PDF
「アジャイル入門」(AgileJapan2013チュートリアルセッション資料)
by
Makoto Nishikawa
42 slides
14.5K views
PPTX
React Nativeでお絵描きしてみた
by
kazuki matsumura
23 slides
1.5K views
PDF
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
by
theguild
14 slides
2.4K views
PDF
LIGにおけるフロントエンドチーム構築
by
Hayashi Yuichi
120 slides
4.6K views
PDF
いい感じのフロントエンド開発環境を作ってみた
by
Hayashi Yuichi
23 slides
41.5K views
PDF
国内初事例に学ぶSAPUI5
by
Mitsuru Ogawa
30 slides
5.8K views
PDF
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
by
Kenichi Tatsuhama
78 slides
190 views
PDF
エンタープライヤーのためのWeb Componentsハンズオン
by
Mitsuru Ogawa
18 slides
3K views
PPTX
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
by
Masataka Sato
19 slides
1.5K views
PDF
業務系WebアプリケーションがStrutsから旅立つ日
by
Mitsuru Ogawa
10 slides
6.5K views
PPTX
Leapmotionとp5.js:DEMOと解説
by
光吉 浜谷
15 slides
515 views
PPTX
おばかアプリ勉強会資料 シグマコンサルティング
by
atmarkit
26 slides
757 views
PDF
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
by
Mitsuru Ogawa
43 slides
7.9K views
PDF
MVPの軌跡と実現したい世界観 『 誰もが自動化に取り組む未来 』
by
JunShiomi
18 slides
593 views
もう一度Kotlinの話をしよう #ndsmeetup4
by
Yukiya Nakagawa
34 slides
1.9K views
Angularおじさんの1年
by
Hayashi Yuichi
30 slides
5.6K views
ゆめみ流 クライアントワークにおけるトライアル&エラー
by
Shusuke Toda
25 slides
1.5K views
Azure 三つ巴チームが送るIgnite 振り返り!
by
Yasuaki Matsuda
17 slides
1.5K views
Angular jsの継続的なバージョンアップ
by
Kazuyoshi Tsuchiya
46 slides
13.5K views
これからフロントエンジニアを目指すあなたへ
by
Mitsuru Ogawa
20 slides
7.9K views
「アジャイル入門」(AgileJapan2013チュートリアルセッション資料)
by
Makoto Nishikawa
42 slides
14.5K views
React Nativeでお絵描きしてみた
by
kazuki matsumura
23 slides
1.5K views
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
by
theguild
14 slides
2.4K views
LIGにおけるフロントエンドチーム構築
by
Hayashi Yuichi
120 slides
4.6K views
いい感じのフロントエンド開発環境を作ってみた
by
Hayashi Yuichi
23 slides
41.5K views
国内初事例に学ぶSAPUI5
by
Mitsuru Ogawa
30 slides
5.8K views
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
by
Kenichi Tatsuhama
78 slides
190 views
エンタープライヤーのためのWeb Componentsハンズオン
by
Mitsuru Ogawa
18 slides
3K views
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
by
Masataka Sato
19 slides
1.5K views
業務系WebアプリケーションがStrutsから旅立つ日
by
Mitsuru Ogawa
10 slides
6.5K views
Leapmotionとp5.js:DEMOと解説
by
光吉 浜谷
15 slides
515 views
おばかアプリ勉強会資料 シグマコンサルティング
by
atmarkit
26 slides
757 views
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
by
Mitsuru Ogawa
43 slides
7.9K views
MVPの軌跡と実現したい世界観 『 誰もが自動化に取り組む未来 』
by
JunShiomi
18 slides
593 views
More from Yukiya Nakagawa
PDF
Atomic Designは「マルチ」で真価を発揮する
by
Yukiya Nakagawa
72 slides
2.4K views
PDF
Androidの入門書を書いたときに気にしたこと #NDS57
by
Yukiya Nakagawa
32 slides
1.3K views
PDF
React Nativeの光と闇
by
Yukiya Nakagawa
93 slides
9.3K views
PDF
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
by
Yukiya Nakagawa
60 slides
1.9K views
PDF
React Native Androidはなぜ動くのか
by
Yukiya Nakagawa
144 slides
11.4K views
PDF
CSS in JSの話 #friday13json
by
Yukiya Nakagawa
23 slides
1.1K views
PDF
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
by
Yukiya Nakagawa
101 slides
27.1K views
PDF
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
by
Yukiya Nakagawa
118 slides
25.2K views
PDF
AndroidLint #DroidKaigi
by
Yukiya Nakagawa
89 slides
16.6K views
PDF
NDS36 Kotlin Cute
by
Yukiya Nakagawa
24 slides
4.2K views
PDF
NDS36 Java7&Java8
by
Yukiya Nakagawa
21 slides
3.4K views
PPTX
Coworking Business Forum in NIIGATA 2013
by
Yukiya Nakagawa
43 slides
1.4K views
PPTX
Niigata.rb#03
by
Yukiya Nakagawa
26 slides
1.2K views
PPTX
PechaKucha Niigata #3 2013.7.27
by
Yukiya Nakagawa
20 slides
740 views
PPTX
ぼくのかんがえたふつうのあんどろいどかいはつ
by
Yukiya Nakagawa
102 slides
2.1K views
PPTX
Androidで使えるJSON-Javaライブラリ
by
Yukiya Nakagawa
49 slides
16.4K views
PPTX
NFCLAB会津
by
Yukiya Nakagawa
45 slides
829 views
PPTX
ぼくらの錬金術〜キメラの作り方〜
by
Yukiya Nakagawa
20 slides
2.6K views
PPTX
Action Bar Compat読んでみた
by
Yukiya Nakagawa
31 slides
2.9K views
PDF
Kosenconf NagaokaNCT
by
Yukiya Nakagawa
96 slides
783 views
Atomic Designは「マルチ」で真価を発揮する
by
Yukiya Nakagawa
72 slides
2.4K views
Androidの入門書を書いたときに気にしたこと #NDS57
by
Yukiya Nakagawa
32 slides
1.3K views
React Nativeの光と闇
by
Yukiya Nakagawa
93 slides
9.3K views
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
by
Yukiya Nakagawa
60 slides
1.9K views
React Native Androidはなぜ動くのか
by
Yukiya Nakagawa
144 slides
11.4K views
CSS in JSの話 #friday13json
by
Yukiya Nakagawa
23 slides
1.1K views
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
by
Yukiya Nakagawa
101 slides
27.1K views
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
by
Yukiya Nakagawa
118 slides
25.2K views
AndroidLint #DroidKaigi
by
Yukiya Nakagawa
89 slides
16.6K views
NDS36 Kotlin Cute
by
Yukiya Nakagawa
24 slides
4.2K views
NDS36 Java7&Java8
by
Yukiya Nakagawa
21 slides
3.4K views
Coworking Business Forum in NIIGATA 2013
by
Yukiya Nakagawa
43 slides
1.4K views
Niigata.rb#03
by
Yukiya Nakagawa
26 slides
1.2K views
PechaKucha Niigata #3 2013.7.27
by
Yukiya Nakagawa
20 slides
740 views
ぼくのかんがえたふつうのあんどろいどかいはつ
by
Yukiya Nakagawa
102 slides
2.1K views
Androidで使えるJSON-Javaライブラリ
by
Yukiya Nakagawa
49 slides
16.4K views
NFCLAB会津
by
Yukiya Nakagawa
45 slides
829 views
ぼくらの錬金術〜キメラの作り方〜
by
Yukiya Nakagawa
20 slides
2.6K views
Action Bar Compat読んでみた
by
Yukiya Nakagawa
31 slides
2.9K views
Kosenconf NagaokaNCT
by
Yukiya Nakagawa
96 slides
783 views
僕らのデータ同期プラクティス
1.
僕らのデータ同期プラクティス Nkzn@ウォーターセル株式会社 2015.4.25 DroidKaigi
2.
裏おもしろそう・・・・・!!! こっち来てくれた皆さんありがとうございます
3.
@Nkzn (なかざん) • 中川
幸哉 (28) • WaterCell Inc. @ Niigata • UIデザイナーとアーキテクトの狭間をうろう ろしている • 日本Androidの会 新潟支部(活動停止中)
4.
私とAndroid • 2009年:卒業研究でAndroid(HT-03A) • 2010年:日本Androidの会
新潟支部立ち上げ • 2011年:現職にJOINして農業者向けアプリ作り • 2013年:Eclipseと決別してAndroid Studioを導入
5.
感想文書いたら 結構話題になってビビった
6.
Where is your
user?
7.
Where is your
user?
8.
自社アプリをオフライン化 ∼試される大地∼
9.
弊社サービスについて • アグリノート http://www.agri-note.jp • 農業生産者向けの農作業管理システム •
Webブラウザ版、Androidアプリで提供 iOS版は開発準備中 • 農業版Redmineに近づいてる
11.
水稲/コシヒカリ ほ場:A-2 作業予定・記録 日付 作業項目 作業者・作業時間 農薬名・使用量 肥料名・使用量 機械 写真 メモ マスタデータと トランザクションデータ
12.
ファーストバージョン 2012年3月リリース。 画面開いた時にフェッチしてくるやーつ。 =電波がないところでは動かない
13.
30km (電波が) 試される大地
14.
気合で同期機能を実装する AlarmManager + IntentService
???
15.
同期処理に必要なもの • 定期的に、または何らかのキックにより • バックグラウンドで通信を行い •
アプリ内のDBを更新する
16.
2013年スタイル AlarmManager IntentService 頑張ってデータを ダウンロードしてきて INSERTする処理 Intent 定期的に実行
17.
れ出るつらみ • AlarmManagerがときどき消える • IntentServiceが連続で走って止まらない •
マルチスレッドでDB叩く状態に突入 • synchronized祭り • ネットワーク有無の検知のために割と頻繁に起動
18.
Androidが提供するデータ同期機能 AccountAuthenticator + SyncAdapter
+ ContentProvider
19.
AndroidManifest.xml SyncService xml/authenticator.xml <service> xml/sync_adapter.xml <service><provider> authorities ContentProvider SyncAdapter contentAuthority accountType accountType onPerformSync() 同期処理を実装 SyncAdapter利用の最小構成
クラス ファイル パラメータ 凡例: AuthenticationService AccountAuthenticator
20.
本当に大事なのは onPerformSyncの中で何をするか public class SyncAdapter
extends AbstractThreadedSyncAdapter { // ... @Override public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { /* Elegant Synchronization */ } // ... }
21.
設計を分けれるの嬉しい ContentProvider SQLite Data Access Object UI付近のコード
SyncAdapter API Client AccountAuthenticator AccountManager
22.
使ってる人が少ない気がする
23.
ドキュメンテッドになったのが 割と最近? 2013年まで公式ドキュメントなかったっぽ い・・・?(Web Archive調べ)
25.
突然情報が出始めた 2009年 2010年 2011年
2012年 2013年 2014年 Android 2.0 Google I/Oで言及 50 Android Hacks 公式ドキュメントが公開? 50 Android Hacks日本語版 mixi-inc/AndroidTraining 弊社もこの頃から 触り始めた
26.
同期アルゴリズムの検討
27.
参考にした資料 • 50 Android
Hacksのサンプルコード • https://github.com/Macarse/50AH-code/ • Hack 23(Pythonサーバー付き) • Evernote Synchronization via EDAM • https://dev.evernote.com/intl/jp/doc/articles/ synchronization.php • https://github.com/ninjinkun/EDAMSync/blob/master/EDAM- Japanese.md (日本語訳)
28.
採用した仕組み • Full Sync,
Incremental Sync • StatusFlag("dirty" flag)
29.
Full Sync, Incremental
Sync サーバー クライアント 1 2 3 1 2 3 1 2 3 1 2 3 Full Sync Incremental Sync
30.
差分を請求する id data modified_at 1
hoge 10:00 2 fuga" 12:00 3 piyo" 15:00 4 hogehoge" 20:00 http://hoge/hoge?modified_after=13:00 last_fetched = 13:00
31.
StatusFlag ("dirty" flag) 未同期のクライアント環境でデータに変更が あったことを表すフラグ
32.
4つのStatus CLEAN サーバーから受け取ったままの状態 ADD 新規に作成された (まだクライアント側にしかない) MOD サーバーから受け取ったものに変更を施した DELETE
サーバーから受け取ったものを削除した
33.
同期の流れ
34.
同期の流れ 1. データのダウンロードを行う • 初回はFull
Sync, 2回目以降はIncremental Sync 2. サーバーで削除されていたデータをクライアントでも削除する 3. サーバーで更新されていたデータをクライアントでも更新する 4. クライアント側で作成(ADD)・更新(MOD)・削除(DELETE)されたデータ をサーバへ送信する 5. 送信が済んだデータのStatusFlagをCLEANにする 6. last_fetchedを1の時刻に更新する
35.
競合問題 > 2. サーバーで削除されていたデータをクライアントでも削除する >
3. サーバーで更新されていたデータをクライアントでも更新する 同じデータの削除や更新がサーバーとクライアント両方で行われてい た場合、競合する
36.
対応策 • 常にサーバー側が勝つ • 送信を諦める •
常にクライアント側が勝つ • サーバーからのデータを捨てる • クライアント側でマージしてからサーバーへ送る • なんとか全部生かす Evernoteはこれ アグリノートはこれ
37.
同期パターンの確認
39.
まとめ • mixi-inc/AndroidTrainingでSyncAdapterを勉強して • 50AHでSyncAdapterのサンプルを知って •
EDAMの理屈を参考にして同期の仕組みを考える • 競合解決の方針はそのサービスのポリシー次第
40.
最後に ウォーターセル株式会社では、地球人口100億の時 代に見合う食料生産のための農業革命を一緒に引っ 張っていってくれるAndroid/iOSエンジニアを探し ています。