データ指向アプリケーションデザイン
https://scrapbox.io/files/66654c165b96cf0032927611.png
読んでて気になったことメモ
1章
p7
Chaos Monkey
本番環境でランダムに任意でエラーを起こすらしい、気合ある
現実的には stg 環境で起こすとかはありそう
ただし Stg 環境だとデータの不整合とかがありがちなので、、
p8
「ホストスワップ」
p9
Linux カーネル中のバグのために多くのアプリケーションが同時にハングしてしまいました
「ハング」?
なるほどね
うるう秒って最近廃止されたよね?
とおもったら「廃止」ではなくあくまで「実時間とのズレを 0.9s 以上許容する」ということらしい
まぁ廃止とも言える?
人間には信頼性がない
w
p12
「ファンアウト」( Fanout )
元々は電子工学の言葉だが、転じで「あるリクエストの解決が依存しているリクエスト」的な意味らしい
便利な言葉をしれてよかった
p15
レスポンスタイムって指数分布な気が最近している
特に根拠はないけど経験上
p17
「複数のリクエストが強調して一つの結果を出す場合、その結果のパフォーマンスは複数のリクエストのなかで最悪のものになるから注意」という話
フロントエンドとかその傾向強そう、FE でパーセンタイルの話をするときは注意ね
p20
メンテナンス性大事(共感
友達とやっている Twin:te も最初はモダンでナウい構成でやっていたが、メンテナンス性が悪く引き継ぎが大変だったのでシンプルな構成にした あと開発が鈍くなる
p22
抽象化!したいね
2章
p32
ポリグロットパーシステンス
polyglot persistence
データの特性に合わせて複数の種類の DBM を合わせることらしい
p33
履歴書のようなものを JSON のようなもので表すと、後から特定の項目を横串に列挙したいときなどに困りそう
→ 読み進めると実際に困っていた
p36
ドキュメント DB は m:1 の関係性の表現が難しいらしい…?
p39
CODASYL
p42
RDB のドキュメント形式のサポート
偶然みつけたけど JSON は文字が Unicode で表現されていることを要求しているのか
p54
Cypher
どういうふうにつかうのかは気になる
辺に property はなぜいる?
第 3 章
まずはインデックスのありがたさを感じる
B+Tree らしい
code:console
python3 main.py
Inserting records...
Updating records...
Searching records...
Insertion time (with index): 6.4200 seconds
Insertion time (without index): 0.9841 seconds
Update time (with index): 0.0030 seconds
Update time (without index): 0.0024 seconds
Search time (with index): 0.0001 seconds
Search time (without index): 0.0911 seconds
インデックスはありがたい
p76
Bitcask
Erlang
log-structured filesystem
更新すると過去の index が全部ずれるから大変そうと思ったが、ログだから更新がなかった
p86
ページサイズが $KB
メモリのページサイズと合わせている?
p88
redo ログ
気になる
code:console
du -h /var/lib/postgresql/data/pgdata/pg_wal/*
16.0M /var/lib/postgresql/data/pgdata/pg_wal/00000001000000000000001A
16.0M /var/lib/postgresql/data/pgdata/pg_wal/00000001000000000000001B
16.0M /var/lib/postgresql/data/pgdata/pg_wal/00000001000000000000001C
16.0M /var/lib/postgresql/data/pgdata/pg_wal/00000001000000000000001D
16.0M /var/lib/postgresql/data/pgdata/pg_wal/00000001000000000000001E
16.0M /var/lib/postgresql/data/pgdata/pg_wal/00000001000000000000001F
16.0M /var/lib/postgresql/data/pgdata/pg_wal/000000010000000000000020
16.0M /var/lib/postgresql/data/pgdata/pg_wal/000000010000000000000021
16.0M /var/lib/postgresql/data/pgdata/pg_wal/000000010000000000000022
4.0K /var/lib/postgresql/data/pgdata/pg_wal/archive_status
cd <path/to/gp_wal>
hexdump hexdump -C -n 128 00000001000000000000001A
00000000 0d d1 07 00 01 00 00 00 00 00 00 1a 00 00 00 00 |................|
00000010 38 00 00 00 00 00 00 00 1e a0 e9 7e ff fd 7c 66 |8..........~..|f|
00000020 00 00 00 01 00 20 00 00 a7 10 01 00 5c 23 01 00 |..... ......\#..|
00000030 01 00 00 00 ff 02 00 00 02 00 04 00 28 40 37 30 |............(@70|
00000040 31 4a 31 45 58 31 4b 50 35 30 44 4d 5a 42 59 4a |1J1EX1KP50DMZBYJ|
00000050 59 30 5a 47 59 5a 56 31 59 00 00 00 00 00 2b 00 |Y0ZGYZV1Y.....+.|
00000060 40 00 00 00 b9 55 03 00 e0 ff ff 19 00 00 00 00 |@....U..........|
00000070 00 0b 00 00 4f 62 c7 63 00 20 10 00 7f 06 00 00 |....Ob.c. ......|
16M 単位な理由てなんだろう?
wal の中身を見たい
8192 byte 単位らしい
先頭は XLogLongPageHeaderData などのメタデータで XLOG recordが変更か?
第 4 章
p120
前方互換性
p124
MessagePack
フィールド名の username を ASCII で表現したものです
key を ASCII に制限している?
String extending Raw type represents a UTF-8 string
そんなことなかった
p130
repeated がよくわからぬ
第 5 章
p156
最善の価格対性能比
p157
シャーディング
Sharding
p161
分散データベースの具体的製品例
Google Cloud Spanner
Amazon Aurora
TiDB
MongoDB
p164
実際のサービスで考えたい
AWS RDS を例にとってくる
console
https://scrapbox.io/files/66931f803716a1001c8237d8.png
https://scrapbox.io/files/669320117ec6b2001c089ef3.png
p165
データの不整合とかがきになる
p171
p186
3ウェイマージ
git diff x...y のこと…?
第 6 章
別ベージに切り出す
第 10 章
p434
0x1E の方が良い選択肢
気になるから調べる
p438
Map は並列実行可能だと思うが Reduce はそうなのか?
p455
sushi principle
MapReduce
ビックデータに SQL は辛いらしい
SQL を map reduce で実行するやつとかあるのかな
それこそ Apache Hive とか Big Query は SQL もどきを書けるが